# 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, 只需要修改元数据

一般让系统自己判断即可,或者借助专业工具

上次更新: 10/31/2022, 5:19:53 PM