MySQL数据库规约

建表规约

表、字段命名
• 必须使用小写字母或数字
• 禁止出现数字开头
• 禁止两个下划线中间只出现数字
• 不使用复数名词
• 禁用保留字
• 是与否概念的字段,必须使用 is_xxx 的方式命名
数据类型

  • 小数类型为 decimal
  • 货币数据使用最小货币单位,数 据类型为bigint
  • 字符串长度几乎相等使用 char
  • varchar长度不要超过 5000
    表必备三字段
  • id
  • create_time
  • update_time
    建表推荐规约
  • 表的命名最好是遵循 “业务名称_表的作用”
  • 库名与应用名称尽量 一致
  • 如果修改字段含义或对字 段表示的状态追加时,需 要及时更新字段注释
  • 字段允许适当冗余,以 提高查询性能,但必须 考虑数据一致
  • 单表行数超过 500 万行或 者单表容量超过 2GB,才 推荐进行分库分表

索引规约

索引命名

  • 主键索引名为 pk_字段名

  • 唯一索引名为 uk_字段名

  • 普通索引名则为 idx_字段名
    创建索引规约

  • 有唯一特性的字段必须建成唯一 索引

  • 在 varchar 字段上建立索引时, 必须指定索引长度

  • 建组合索引的时候,区分度最高的在最左边。

SQL规约

索引

  • 防止因字段类型不 同造成的隐式转 换,导致索引失效
  • 利用覆盖索引来进 行查询操作,避免 回表
  • 如果有 order by 的 场景,请注意利用 索引的有序性
  • 页面搜索严禁左模 糊或者全模糊,如 果需要请走搜索引 擎来解决。

count

  • 不要使用 count(列名) 或 count(常量)来替代 count(*)
  • count(distinct col) 计算该列除 NULL 之外的 不重复行数
  • 当某一列的值全是 NULL 时,count(col) 的返回结果为 0,但 sum(col)的返回结果 为NULL

分页

  • 若 count 为 0
  • 分页查询逻辑时,若 count 为 0 应直接返回
  • 优化超多分页场景
  • 利用延迟关联或者子查 询优化超多分页场景

null值

  • 使用 ISNULL()来判断是否为 NULL 值
  • NULL< >NULL NULL< >NULL 的返 回结果是 NULL, 而不是 false
  • NULL=NULL NULL=NULL 的返回 结果是 NULL, 而不是 true
  • NULL< >1 NULL< >1 的返回结 果是 NULL, 而不是 true

必坑指南

  • 不得使用外键与级联,一切外键概念必 须在应用层解决
  • 禁止使用存储过程,存储过程难以调试和扩展,更没有移植性
  • 数据订正时,要先 select,避免出现误 删除,确认无误才能执行更新语句
  • 只要涉及多个表,都需要在列名前 加表的别名(或表名)进行限定
  • in 后边的集合元素数量,控制在 1000 个之内
  • SQL 语句中表的别名前加 as,并且 以 t1、t2

ORM映射规约

  • 在表查询中,一律不要使用 * 作为查询的字段列表
  • POJO 类的布尔属性不能加 is,而数据库字段 必须加“is_”
  • 查询返回结果都需要使 用ResultMap映射
  • 不要使用${}
  • 不要使用MyBatis 自带 的 queryForList方法
  • 不允许直接使用 HashMap 与 Hashtable 接收结果集
  • 更新数据表记录时,必须同时更新update_time
  • 不要写一个大而全的数 据更新接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值