mysql的一些规范
我司的mysql规范,值得牢记
一.禁止内容
- 表字段类型 不推荐使用enum,set,blob,text等类型
- 表中所有字段都不能为空,需要设置not null属性,可以给默认值
- 表的主键列值禁止被更新,可以进行删除操作。
- 程序中不能试用中间表和备份表 表名以tmp_开头或者 bak_开头
- 数据库账号的授权需要具体到授权服务器的IP,禁止使用机器名和%
- 禁止使用insert、delete或update语句进行用户权限的设置,清理和修改操作
- 禁止使用old_password进行加密,数据库参数old_passwords必须置为OFF
- 禁止使用全文检索功能
- 禁止使用事件(EVENT)功能
- 禁止在mysql中使用用户自定义变量
- 不推荐使用外键,临时表,视图,自定义函数,存储过程以及触发器
- SELECT语句必须指定具体字段名称,禁止写成*
- SELECT语句禁止使用UNION,推荐使用UNION ALL
- INSERT语句必须指定具体的字段名称
- 禁止写成多层子查询嵌套的SQL语句,推荐改写成表顺序连接的格式
- 禁止在INSERT|UPDATE|DELETE|REPLACE语句中进行多表连接操作
- WHERE 子句中禁止只使用全模糊的LIKE条件进行查找,必须有其他查询条件
- WHERE子句中的索引列或组合索引前导列上不能使用函数
二.数据库设计原则
1.数据库名称 小写 字母 数字 _ ,不超32字符 例如: test_db
2.数据库字符编码 utf8或者gbk
3.表结构 :表名与字段名 小写 字母 数字 _ ,数据表量少推荐表名为 数据库缩写+表功能名 如 test_dict,量多按功能划分 如资源区可以用 r_dict,数据区可以用 d_dict。
创建表时必须显式指定字符集,与库一致。
创建表时必须显式指定表存储引擎类型。
表中的自增列(auto_increment属性)推荐使用bigint类型
状态status、类型type等字段推荐使用tinytint或者smallint类型
IP地址字段推荐使用int类型
使用表中必须有时间字段create_time和最后更新时间字段update_time
4.索引的设计原则
InnoDB类型表必须要有主键列
索引类型必须为BTREE
主键的名称以"pk_"开头
唯一键以"uk_"开头
普通索引以"idx_"开头
分区表的分区字段(partition-key)必须有索引
5. 数据库账号
读写账号以"_w"后缀,只读账号以"_r"后缀