1 / 13
文档名称:

MySQL数据库开发规范.docx

格式:docx   大小:715KB   页数:13页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

MySQL数据库开发规范.docx

上传人:hqqs8 2022/7/31 文件大小:715 KB

下载得到文件列表

MySQL数据库开发规范.docx

文档介绍

文档介绍:Last updated at 10:00 am on 25th December 2020
MySQL数据库开发规范
平安金融科技 数据库(MySQL)开发规范
作者: 简朝阳
Last Updated: 2型。谨慎使用
时间类型
DATE
只需要精确到天的字段使用DATE类型。精确到"天"的取当前时期的操作使用CURDATE()函数实现。 -DATETIME
需要精确到时间(时、分、秒)的字段使用DATETIME类型。精确到"秒"的取当前时间的操作使用NOW()函数实现。取值范围:'1000-01-01'到'9999-12-31'
TIMESTAMP
该类型仅允许raw_update_time字段使用,其它字段不允许使用该类型。取值范围:'1970-01-01 00:00:00'到'2037-01-01 00:00:00'
. 表设计
必含字段
id INT:主键使用MySQL的自增类型
raw_add_time DATETIME:创建日期(大字段拆分表除外),必须使用数据库时间(用now()生成)
raw_update_time TIMESTAMP:修改日期(大字段拆分表除外, 但内容变化必须修改主表的update_time字段),由数据库自动变更,应用不操作此字段
以上3个字段都必须是没有任何商业意义的与业务无关的字段,不允许赋予任何商业意义
作为表间连接关系的字段,数据类型必须保持严格一致,避免索引无法正常使用。
附属表拆分后,附属表关联字段使用主表主键字段,且附属表须有独立主键(大字段拆分的表不需要单独的主键)
存在过期概念的表,在其设计之初就必须有过期机制,且有明确的过期时间。过期数据必须迁移至历史表中。
不再使用的表,必须通知DBA予以更名归档。
线上表中若有不再使用的字段,为保证数据完整,禁止删除,而是进行更名归档,名称统一增加"droped_"前缀
. 约束使用
主键
主键不能包含业务含义。
主键在任何情况下不允许被更新。
唯一约束
除主键外,需存在唯一性约束的,可通过创建以"uk_"为前缀的唯一索引实现。
外键
任何情况不在数据库创建外键约束,外键规则由应用控制。
非空列
所有非空列须在建表之初明确标识"NOT NULL",上线之后,不允许再变更。
存储过程、触发器、视图、计划任务
禁止任何业务逻辑通过封装在数据库中的procedure/function/trigger实现。
禁止应用程序使用view。
禁止业务逻辑使用数据库的计划任务。
3. SQL编写规范
. 绑定变量与替代变量
原则
所有 Query 的 Where 条件中的变量,都需要使用绑定变量来实现,此要求并不完全是基于性能的考虑,更多是基于安全方面的考虑。
. 数据类型转换
原则
避免因数据类型转换导致执行计划有误。
说明
where条件中的过滤字段如需转换类型,只可转换过滤值,不可转换被过滤字段。
表连接操作中,作为连接条件的字段的数据类型严格一致。
如果表连接字段数据类型不一致,在SQL中用显示用类型转换,具体情况咨询DBA。
示例
正确用法1:select col1, col2 from tbl1, tbl2
where = ;
其中""与""数据类型严格一致。
正确用法2:select col1,col2 from tbl
where gmt_create = str_to_date(' 00:00:00','%Y%m%d %H:%i:%s');
"count(…)"使用
除非是明确目的是统计某个字段上值不为空的记录的数目,否者只允许之用 count(*),而不允许使用count(column_name) 或者 count(1)。
. "select * from …"使用
原则
为避免查询中无用字段参与排序操作而导致的性能降低及潜在的安全隐患。禁止使用"select * from …"。
说明
任何情况都要明确列出查询需要返回的字段,禁止使用select * 返回所有字段。
. "insert into tablename values()"使用
原则
为避免增加或删除字段带来的SQL报错。禁止使用省略字段名的insert into语句。
说明
任何情况都要明确列出需要写入的字段名称。
. 表连接
原则
规范连接语法以方便SQL脚本的阅读及提升连接操作性能。
说明
非外连接查询中,连接表在"from"子句中列出,并以逗号分隔;连接条件在"where"子句中列出,而不允许使用join … on 方式实现join。
外连接查询中,可使用"left join …