• 基于Centos7.6

1.库定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1>建库
create database school;
create schema sch;
show charset;
show collation;
CREATE DATABASE test CHARSET utf8;
create database xyz charset utf8mb4 collate utf8mb4_bin;

建库规范:
1.库名不能有大写字母
2.建库要加字符集
3.库名不能有数字开头
4.库名要和业务相关

建库标准语句
mysql> create database db charset utf8mb4; #还可以加校对规则如:create database db charset utf8mb4 collate utf8mb4_bin;
mysql> show create database db;

2>删库(生产中禁止使用)
mysql> drop database database_name;

3>修改
SHOW CREATE DATABASE school;
ALTER DATABASE school CHARSET utf8;
注意:修改字符集,修改后的字符集一定是原字符集的严格超集(从小的往大的改,如utf8-->utf8mb4),否则可能出现乱码

4>查询
show databases;
show create database database_name;

2.表定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
1>建表
格式:
create table stu(
列1 属性(数据类型、约束、其他属性),
列2 属性,
列3 属性
)

例子:
USE school;
CREATE TABLE stu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
sname VARCHAR(255) NOT NULL COMMENT '姓名',
sage TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
sgender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别' ,
sfz CHAR(18) NOT NULL UNIQUE COMMENT '身份证',
intime TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
) ENGINE=INNODB CHARSET=utf8 COMMENT '学生表';

建表规范:
1. 表名小写,不能是保留字符
2. 不能是数字开头
3. 注意字符集和存储引擎
4. 表名和业务有关
5. 选择合适的数据类型及长度
6. 每个列都要有注释
7. 每个列设置为非空,无法保证非空,用0来填充
8. PRIMARY KEY:主键约束,表中只能有一个,非空且唯一
9. NOT NULL:非空约束,不允许空值
10.UNIQUE KEY:唯一约束,不允许重复值
11.DEFAULT:一般配合NOT NULL使用
12.UNSIGNED:无符号,一般配合数字列,非负数
13.COMMENT:注释
14.主键列尽量是与业务无关数字列,最好是自增长
15.enum类型不要保存数字,只能是字符串类型

2>删除(生产中禁用命令)
drop table t1;

3>修改
1.在stu表中添加qq列
DESC stu;
ALTER TABLE stu ADD qq VARCHAR(20) NOT NULL UNIQUE COMMENT 'qq号';
2.在sname后加微信列
ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE COMMENT '微信号' AFTER sname ;
3.在id列前加一个新列num
ALTER TABLE stu ADD num INT NOT NULL COMMENT '数字' FIRST;
DESC stu;
4.把刚才添加的列都删掉(危险)
ALTER TABLE stu DROP num;
ALTER TABLE stu DROP qq;
ALTER TABLE stu DROP wechat;
5.修改sname数据类型的属性
ALTER TABLE stu MODIFY sname VARCHAR(128) NOT NULL ;
6.将sgender 改为 sg 并且数据类型改为 CHAR 类型
ALTER TABLE stu CHANGE sgender sg CHAR(1) NOT NULL DEFAULT 'n' ;
DESC stu;

3.表属性查询(DQL)

1
2
3
4
5
6
7
use school
show tables;
show create table stu #查询建表信息
desc stu; #查看表结构
show create table stu;
CREATE TABLE ceshi LIKE stu; #创建一个表结构一样的表
pt-osc:Percona-toolkit online schema change工具,支持在不锁表的情况下,在线改表。8.0版本的MySQL有Online DDL原生工具达到此需求。