MySQL规约

167 阅读2分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

1. 建表规约

1.1 表、字段命名

  • 表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字
  • 表名不能使用复数名词
  • 禁用保留字,如desc、range、match、delayed等
  • 表达是与否的概念字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否)
  • 表必备三字段: id,create_time, update_time
  • 表命名应该遵循: 业务名称_表的作用

1.2 数据类型

  • 小数类型用decimal,尽可能不使用float和double,因为 float 和 double在存储的时候存在精度损失的问题
  • 货币数据使用最小货币单位,数据类型为bigint
  • 如果存储的字符串长度几乎相等,可以使用char定长类型
  • varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。

2. 索引规约

2.1 索引命名

 1. 主键索引名用px_字段名
 2. 唯一索引名用uk_字段名
 3. 普通索引名用idx_字段名

2.2 创建索引

 1. 有唯一特征性的字段必须建成唯一索引
 2.varchar字段建索引时,必须指定索引长度
 3. 建组合索引的时候,区分度最高的在最左边

3. SQL 与 ORM映射

3.1 SQL语句

count查询注意的地方

 1. 统计语句用count(*), count(*)是SQL92定义的标准统计行数的语法
 2. count(distinct col) 计算该列除NULL之外的不重复行数
 3. 使用ISNULL()来判断是否为NULL值

有关于索引查询注意的地方

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

3.1 ORM映射

  1. 在查询表中,一律不要使用 * 作为查询的字段列表
  2. POJO类的布尔属性不能加is, 而数据库字段必须加“is_"
  3. 查询返回结果都需要使用ResulMap映射
  4. 不要使用${}
  5. 不要使用MyBatis自带的queryForList方法
  6. 不允许直接使用HashMap 与 Hashtable接收结果集
  7. 更新数据记录时,必须同时更新update_time
  8. 不要写一个大而全的数据更新接口