# Day04 SQL 定义库与表
# 本节关键词
库定义
表定义
# 内置命令
- 客户端
help ? # 展示命令列表
delimiter ; # 语句结尾标志
ego \G # 列展示
source t100w.sql # 执行脚本
# sql_mode
# 5.7 默认开启严格模式
show variables like '%sql_mode%';
| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
# 可以把不需要的去掉即可
set global sql_mode = '';
# 数据类型
合适的、足够的、简短的
如果数据确定是一定长的,用 char
如果不确定数据是多长的,用 varchar
建索引时 关注一下 **
# 库定义
- 基本语句
# 建库
create database if not exists aaa charset utf8mb4 collate utf8mb4_general_ci;
# 查库
show create database aaa;
show databases;
# 改库
alter database aaa charset utf8mb4 collate utf8mb4_general_ci;
# 删库
drop database if exists aaa;
- 规范
1. 库名 不要数字开头,不用关键字
2. 生产禁用 drop database (管理员可以,其他人审批)
3. 显示设置 字符集 charset utf8mb4 collate utf8mb4_general_ci;
# 表定义
- 基本语句
# 建表
create table stu(
id int unsigned not null primary key auto_increment comment '主键-注意约束的顺序',
name varchar(64) not null comment '姓名',
age tinyint not null default 18 comment '年龄',
gender char(1) not null default 'M' comment '性别 M|F',
address enum('bj', 'tj', 'sh', 'cq') not null comment '城市 enum 用好了速度会很快',
telephone char(11) not null unique key comment '手机',
created_time datetime not null default now() comment '入学时间'
)engine=innodb charset=utf8mb4 comment '学生表';
# copy表结构
create table stu1 like stu;
# 查表
show create table stu\G;
desc stu;
# 改表名
rename table stu1 to stu2;
# 删表
drop table stu2;
# 清空表
truncate table stu2;
# 加字段
alter table stu add is_deleted tinyint not null default 0 comment '是否删除';
# 删字段
alter table stu drop is_deleted;
# 改字段属性
alter table stu modify name varchar(128) not null comment '姓名';
# 加索引
alter table stu add index idx_name(name);
- 可参考规范: Java开发手册(嵩山版).pdf
# Online DDL
alter table t1 add a int ALGORITHM=?;
- COPY,阻塞需要生成临时表
- INPLACE,不需要生成临时表 5.6开始
- INSTANT, 只需要修改元数据
一般让系统自己判断即可,或者借助专业工具