Mysql问题汇总&学习记录1
utf8和utf8mb4有什么区别? - 知乎 (zhihu.com)
设置Mysql永久统一编码问题:(2条消息) MySQL5.7永久统一编码/字符集为utf8(解决乱码)_mysql 5.7.29 utf8 乱码_NekoSheep的博客-CSDN博客
一篇搞懂mysql字符集编码配置及修改方法 - 掘金 (juejin.cn)
这里我暂时未修改,因为有的博主说不用修改,并且utf8存在一些问题,我就暂时没改。
我发现最新版本MySQL自带的Command Line Client 自带两种版本,一种是不带后缀的- Unicode版本,一种是自带-Unicode版本。原来-Unicode版本已经帮我们统一了编码。所以该问题我们现在是不需要去考虑的。(如下两张的对比图)
由此我们可以得知,我们在后续使用时,可直接使用-Unicode版本的操作台,以避免可能出现的字符乱码的问题。
sql语句:
操作文件夹(库)
增:create database db1 charset utf8;
查:show create database db1;
改:alter database db1 charset gbk;
删:drop database db1;
操作文件(表)
切换文件夹:use db1;
查看当前所在文件夹:select database();
增:create table t1(id int,name char);
查:show create table t1;
show tables;#查看所有
desc t1;
改:alter table t1 modify name char(6);
alter table t1 change name NAME char(7);
删:drop table t1;
操作文件内容(记录)
增:insert t1(id,name)values(1,‘egon1’),(2,‘egon2’),(3,‘egon3’);#顺序一一对应
查:select id,name from db2.t1;
select * from db2.t1;#查询所有文件,但不推荐使用
改:update db2.t1 set name=‘SB’;
update db2.t1 set name='DUMP’where id = 2;
查:delete from t1;
delete from t1 where id = 2;
库操作
SQL语言分为三种类型:
1、DDL语句 数据库定义语言:数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
2、DML语句 数据库操纵语言:插入数据INSERT、删除数据DELETE、更新数据UPDATE
3、DCL语句 数据库控制语言:例如控制用户的访问权限GRANT、REVOKE
系统数据库
information_schema:虚拟库,不占磁盘空间,存储数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
performance_schema:收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象
mysql:授权库,主要存储系统用户的权限信息
test:MySQL数据库系统自动创建的测试数据库
创建数据库
create database 数据库名 charset utf8
规则:可用字母、数字、下划线、@、#、&;区分大小写;唯一性;不能使用关键字;不能单独用数字;最长128位(类似python规则)
数据库相关操作:上一节SQL语句
*help xxx:可查看相关操作名字;使用规则等等。
表操作
存储引擎
存储引擎就是表的类型
查看MySQL支持的存储引擎:show engines;
指定表类型/存储引擎:
create table t1(id int)engine = innodb;#默认为innodb
create table t2(id int)engine = memory;#存在内存里,重启就没了
create table t3(id int)engine = blackhole;#垃圾数据往里丢就没了
create table t4(id int)engine = myisam;
插入表值
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
查看表数据:select * from tx;
表的增删改查
创建表:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
);#同一张表字段名不能相同,宽度和约束条件可选,字段名和类型必须有
desc 文件名字:查看表信息;
show create table t1\G;#查看表详细结构,可加\G,便于一行一行显示。
修改表结构
复制表
eg. create table t1 select host,user from mysql.user;#将mysql.user中包含host,user字段的数据放入t1表中去(既要表结构又要记录)
create table t2 select host,user from mysql.user where 1>5;#给一个错误的逻辑,可只复制表结构不复制内容。
另一种方法:create table t3 like mysql.user;#可直接复制表结构不复制内容
删除表:drop table 表名;
数据类型
整数类型
如不规定默认为有符号的范围
create table t2(x tinyint unsigned);#位无符号的范围
老版本超量程会直接显示最大数值,新版本超量程会报错。
create table t3(id int(1) unsigned);#(1)这个宽度指的是显示宽度,而不是存储宽度。存储宽度是固定死了的如上上个表。
显示宽度:如果数据量超过显示宽度数据了,则控制的显示宽度无效。
浮点型
float double decimal 精度不同