MYSQL数据库开发规范

来源:互联网 发布:软件开发网站 编辑:程序博客网 时间:2024/05/29 11:30

自己总结的mysql开发规范,够用就行了。


1、表

1.1 表必须要有主键,主键使用自动递增,类型为int。

1.2 表名使用有意义的英文单词,可用下划线分割。如需使用缩写时,不可使用意义不明的缩写。

1.3 需要多表join的字段,数据类型保持绝对一致。

1.4 字段命名时需要加上表名,确保所有表中的字段都是唯一的。如字段中有关联其他表的字段,则字段名和关联表的字段一致即可。

1.5 所有字段必须写有注释。

1.6 用varchar类型存储时间或日期。

1.7 尽可能把字段定义为非空。

1.8 字段的字符集设置为utf8,排序规则设置为utf8_general_ci。

1.9 表名和字段名统一使用小写。

1.10 不要在字段上建立外键约束,约束请从程序上进行控制。

1.11 建立合理的冗余字段会使查询更高效。如:表中有单价和数量字段,总金额是字段算出来的,如果建立总金额字段,查询时就避免了转换的过程(用空间换时间)。

 

2、索引

2.1 索引以字段名_ 索引类型方式命名,如:staff_status_normal

2.2 表中的num字段必须建立索引。

2.3 页面中的查询选项,如下拉框、按编码查询,需要在这些字段上建立索引,模糊查询字段不需要建立索引。

2.4 若A表的a字段被B表关联,则A表的a需要建立索引。


3、SQL

3.1 给每张表都起一个别名,这样做可以增加可读性、在客户端中写SQL时可以很方面的点出来字段还可以带来性能的提升。如:select a.id fromtable a

3.2 不需要在表名前增加数据库前缀,这样做没有任何意义。如:cmdb.sn_staff

3.3 使用now()而不使用sysdate()是个好习惯。如果系统中存在主从数据库,使用sysdate()会导致主从数据库的数据不一致。

3.4 不要写select * 这样的代码,指定需要的字段名。

3.5 避免在where子句中使用函数,这样会让使用函数字段的索引失效。

如:select a.name from student awhere left(0,a.num)=’abc’

  3.6不要使用count(列名)来替代count(*),count(常量)和count(*)的性能几乎一致。即使列名加了索引count(column_name)也比count(*)慢,而且count(column_name)不计算为null的行数。

3.7 注意null与任何值逻辑运算符计算结果都为null,并不会返回true或者false,所以判断字段是否为空是请使用is null或者is not null。

3.8 尽量使SQL格式化,好的编码风格会让程序容易排错和一目了然。

3.9 全模糊查询无法使用索引,请尽可能避免。使用右模糊查询可以走索引,

如:select a.num from student a where a.name like ‘张%’。

3.10 使用not in时请确保子查询列中没有null值,否则请用not exists代替,否则会产生严重的bug。

如:表a,表b,SQL:selecta_string from a where a_string not in (select b_string from b),预期返回,实际没有任何的返回值

使用not exists可正确返回结果:select a_string from awhere not exists (select b_string from b where a.a_string=b.b_string)。

3.11 使用not in不会返回字段为null的数据。select * from t1 where t1.name not in ('A'),假如有一条数据的name为null,那么不会返回这条数据。

3.12 int占4字节,范围是[-2147483648,2147483647],int(10)并不会影响这个范围。

原创粉丝点击