DataGrip 2022 更新了建表 UI,比之前功能更多,也更好用了。在此结合它来复习一下建表相关的知识。
表
- Engine: 优先选择 InnoDB,它是事务型的,支持行级锁。
- Collection: 创建数据库时使用 utf8mb4_general_ci ;创建表时不填写即可,会根据数据库的设置来优先选择。
列
Date Type:
- 字符串: char 是定长的,如手机号码;varchar 可变长字符串,如用户名;
- 大文本: text 大文本,文章详情、json串等使用,非必要时不使用;索引需要使用范围索引;
- 日期、时间: datetime
- 整数: tinyint, 0 ~ 255 之间,用于存年龄、状态值等; int,有 42 亿的范围,适合大部分场景;bigint,几百亿;INT(11) 中的数字只是规定了显示字符的个数,不影响存储和计算。
- 浮点数:double
Not Null
- 大部分情况下不推荐使用可空列,勾上该 Not Null 选项
- 字符串默认值
''
, 数值默认值0
- 软删除如果需要使用 delete_time 字段,则使用可空列
Auto Increment
- int 类型主键自增时使用
Default Expression
- 默认值,如日期类型指定 CURRENT_TIMESTAMP
On Update
- 更新时设置,如 update_time 字段指定 CURRENT_TIMESTAMP
键
- 需建立主键、唯一键等,可在“列”中通过右键创建
- 可选中多个字段后按右键创建键,如创建多个字段结合的唯一键
索引
- 不使用外键索引,通过 ORM 代码层面建立关联关系
- 索引选择性高时,才需要加索引
- text 类型需使用范围索引
- 联合索引按最左前缀顺序进行匹配才会命中
- 如果已存在联合索引,对于前缀部分不需要再创建索引