1. 建表规约
1.1 表示是否概念的字段约束
必须使用is_xxx的方式命名,数据类型是unsigned tinyint( 1 表示是,0 表示否 )
注意:任何字段如果是非负数,必须是unsigned
1.2 表名、字段名约束
对于表名、字段名必须使用小写字母或数字,禁止数字开头,禁止两个下划线之间只出现数字,而且表名不能使用复数名称
1.3 禁用保留字,比如:desc、range、match等等
1.4 索引名约束
索引名 | 名称约束 |
---|---|
主键索引 | pk_字段名 |
唯一索引 | uk_字段名 |
普通索引 | idx_字段名 |
全文索引:InnoDB不支持,Myisam支持性能比较好,一般在char、varchar、text列上创建
1.5 小数类型约束
小数类型为decimal,禁止使用float和double
原因:在存储的时候,float和double都存在精度损失的问题
建议:存储数据的范围超过decimal的范围,建议将数据拆分为整数和小数分开进行存储
1.6 如果存储的字符串长度几乎相等,使用char定长字符串类型
2. 索引规约
2.1 业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引
说明:建立唯一索引影响insert的数度可以忽略不记,但是建立唯一索引查找速度就会增加
2.2 超过三个表禁止join,需要join的字段,数据类型必须一致;多表关联查询时,保证被关联的字段需要有索引
2.3 在varchar字段上建立索引,必须指定索引长度,没必要对全字段建立索引
2.4 页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。
3. SQL语句
3.1 不要使用count(列名)或者count(常量)来替代count(*)
count(*)会统计值为NULL的行,而count(列)不会统计列为null值的行
3.2 count(distinct col)计算该列除NULL之外的重复行
注意:count(distinct col1,col2)如果其中一列全为null,那么即使另一列有不同的值,也会返回0
3.3 当某一列的值全是NULL,count(col)返回结果为0但是sum(col)的返回结果为NULL
3.4 使用isnull()来判断是否为null值
说明:null与任何值的比较都为null
1.null<>null返回值为null,而不是false
2.null=null返回值为null,而不是true
3.null<>1的返回结果是null,而不是true