一、库表字段约束规范
不要因为大度而浪费性能,浪费存储
-
不要使用mysql中的关键字进行命名(table、select等)
-
库名、表名与字段名必须是小写字母,不能用大写!并且不能以数字开头!禁止下划线中间出现数字!
(因为Windows中是对大小写不敏感的,Linux是对大小写敏感的,我们需要避免不必要的麻烦)
-
表名不能用复数形式命名,应当考虑与业务名有关。单表行数超过5000万行或单表容量超过2G的要分库分表。
-
值为小数的字段应当使用decimal避免精度丢失,禁止使用float和double类型。
如果字段表示:是或否
举例:is_vip
关键字一定要给 is
类型一定要是 unsigned tinyint
长度为1
如果字段是:非负数
必须添加 unsigned 非负标志
如果定义:字符串长度较小
使用char,不使用varchar
超过5000可以定义为text
字段名规范:
- 主键名:
pk_xxx
- 唯一键名:
uk_xxx
- 索引名:
idx_xxx
一张表中必须有至少三个属性,包括:
id
create_time
update_time
id必须为主键,为无符号 bigint 类型
create_time、update_timec 必须为 datatime 类型
单表时id必须设置自增,且每次自增步长为1
二、索引规范
-
对业务和流程具有唯一特性的字段设计索引
即使它是多个字段的组合也应该设置唯一索引
达到完整性控制,唯一索引作用是避免脏数据产生
-
多表查询(实际上最多只允许两个表)时 join 两边数据类型必须一致
多表关联查询保证关联查询的字段也应该有索引
-
页面上的搜索不要使用左模糊或者全模糊,是由索引的数据结构B+树导致的
-
varchar上建立索引必须指定索引长度,没必要对全字段进行索引
三、SQL开发约束
- 不要妄想使用 count(xxx) 去替代 count(*)
-
不要使用等于号(=)判断NULL值
错误的演示:
正确的演示:
-
不要使用外键和级联
在高并发集群的项目中是完全不能使用
一切外键级联的东西在应用层解决
-
实际开发过程中不允许使用存储过程
(因为出错很难解决问题,且存储过程没有移植性、难扩展)
- 删除或更新数据前应先 select 查出来看看数据是否有错误
- 子查询中含 in 的操作能避免就避免
- 使用UTF-8作为编码格式
四、其他约束
-
orm对象关系映射框架中
查询过程中不要用 select * 查询
因为解析器会去解析 *
有些数据我们未必需要查询(超大文本字段没必要查询)
-
不要随意使用 @Transaction
考虑各种事务回滚缓存回滚