1. 库定义
1.1 创建库
1.1.1 创建库的SQL
CREATE DATABASE school;
CREATE SCHEMA sch;
show charset;
show collation;
create database utf8_test charset utf8;
create database collate_test1 charset utf8mb4 collate utf8mb4_bin;
create database collate_test2 charset utf8mb4 collate utf8mb4_general_ci;
1.1.2 创建库的规范
- 库名不能大写
- 库名不能以数字开头
- 建库时需要加字符集
- 库名要和业务有关
1.2 删除库
drop database 库名;
1.3 修改数据库
1.3.1 修改数据库的字符集
注意:修改字符集,修改后的字符集一定是原字符集的严格超集
alter database 库名 charset 字符集;
例如:
alter database school charset utf8;
1.4 查看库
show create database school;
2. 表定义
2.1 建表
2.1.1 建表SQL
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 '性别',
id_card CHAR(18) NOT NULL UNIQUE COMMENT '身份证',
intime TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
) ENGINE=INNODB CHARSET=utf8 COMMENT '学生表';
2.1.2 建表规范
1. 表名小写
2. 不能是数字开头
3. 注意字符集和存储引擎
4. 表名和业务有关
5. 选择合适的数据类型
6. 每个列都要有注释
7. 每个列设置为非空,无法保证非空,用0来填充
2.2 删表
drop table 表名
2.3 修改表
2.3.1 添加列
8.0之前会锁表,解决方案是通过pt-osc第三方工具来处理。8.0没有这个问题了。
- 在表中添加列
ALTER TABLE 表名 ADD 字段名 数据类型 [约束] [注释];
示例:
ALTER TABLE stu ADD qq VARCHAR(20) NOT NULL UNIQUE COMMENT 'qq号';
- 在某个字段后面添加列
在字段2后面添加字段1
ALTER TABLE 表名 ADD 字段1 数据类型 [约束] [注释] AFTER 字段2;
示例:
ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE COMMENT '微信号' AFTER sname;
- 将某个字段添加为第一个字段
ALTER TABLE 表名 ADD 字段1 数据类型 [约束] [注释] FIRST;
2.3.2 删除列
ALTER TABLE 表名 DROP 字段名;
2.3.3 修改列
- 修改列属性
ALTER TABLE 表名 MODIFY 字段名 属性;
示例:
ALTER TABLE stu MODIFY sname VARCHAR(128) NOT NULL;
- 修改列名
ALTER TABLE 表名 CHANGE 字段1 字段2 属性;
示例:
ALTER TABLE stu CHANGE sgender sg CHAR(1) NOT NULL DEFAULT 'm';