前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql使用规范

mysql使用规范

原创
作者头像
修改2020-12-17 13:11:41
8630
修改2020-12-17 13:11:41
举报
文章被收录于专栏:peiyuan

↓双击 Markdown插件,就可以开始编辑啦。

目的

规范业务系统对MySQL数据库在设计、开发、运维等阶段所必须遵循的原则,旨在控制对数据库的滥用,收敛不合理的使用形式,保障数据库安全、稳定、高效的运行以及业务运营的稳定性。

适用范围

所有使用MySQL的业务系统。

数据库设计规范

  1. 【强制】所有的表必须指定主键(Primary Key),主键是尽可能小的INT类型,并且是AUTO_INCREMENT自增长形式。
  2. 【强制】必须使用InnoDB存储引擎。
  3. 【强制】必须使用UTF-8字符编码。
  4. 【强制】避免使用全文索引fulltext。
  5. 【强制】在满足业务需求的前提下,要求字段长度的定义尽可能的短小。(这样不但节省存储空间,更重要的是可以提升检索速度)
  6. 【强制】库名、表名以及字段名的命名不使用MySQL保留的关键字。
  7. 【强制】避免字段定义允许null值,所有字段定义都应该是not null并且有默认值。
  8. 【强制】表和字段一定要有合理的注释和说明。
  9. 【强制】字段命名使用以下划线分隔或驼峰命名的见名知其意的英文单词。
  10. 【强制】唯一索引命名为uk字段名;普通索引命名为 idx字段名。
  11. 【强制】控制单条记录数据量大小,特别是需要频繁更新的表记录。
  12. 【强制】禁止在数据库中存放图片、文件内容。
  13. 【强制】禁止使用枚举类型,推荐使用tinyint来实现相应场景。(枚举类型扩展不便,必须变更表结构)
  14. 【推荐】如果存储的字符串长度几乎相等,使用char定长字符串类型。
  15. 【强制】有合理的索引。具体请参考http://km.oa.com/articles/view/260016 索引优化部分。
  16. 【强制】业务上具体有唯一特性的字段,即使是组合字段,也必须建成唯一索引。
  17. 【强制】建立组合索引时,区分度最高的,放在最左边。
  18. 【推荐】小数类型必须定义为 decimal,禁止使用float或double (存在精度丢失问题)。
  19. 【推荐】数据表的命名结构最好使用: “业务名称_表的作用”。
  20. 【推荐】库名与应用名称尽量保持一致。
  21. 【推荐】单表行数超过500w行,或单表容量超过2G,才推荐使用分表分库。
  22. 【推荐】根据具体的业务场景,允许适当的字段冗余,但是必须考虑维护与收益比。
  23. 【推荐】如果使用varchar,长度不超过5000,否则字段类型定义为text,并考虑独立出一张表,使用主键对应,避免影响其它字段的索引效率。

数据库应用开发规范

  1. 【强制】数据库访问信息统一配置,必须可以满足一键切换访问实例。
  2. 【强制】所有对数据库的直接操作,永远只有一个统一出口,并且统一出口必须具备失败重连、失败重试、记录错误日志以及异常告警的能力。
  3. 【强制】禁止动态操作表结构(如在应用程序中创建表、修改表结构等操作)。
  4. 【强制】禁止大事务操作(如大批量DELETE)。尽量将事务分解,并且确保可以不在事务体内操作的,移到事务体外。
  5. 【强制】使用主键更新表(如修改、删除记录),特别是并发更新的情况,必须使用主键更新。
  6. 【强制】查询字段避免使用表达式或函数,避免索引失效。
  7. 【强制】超过3个表禁止JOIN,需要JOIN的字段,数据类型保持绝对的一致,多表关联查询时,保证被关联的字段需要有索引。
  8. 【强制】在varchar上创建索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度。
  9. 【强制】SQL执行前,但凡外部传入的数据都要进行防注入过滤,或者使用mysqli-prepare预处理执行。
  10. 【强制】避免使用replace into写入数据(并发操作非常容易死锁),考虑on duplicate key update代替。
  11. 【强制】禁止使用外键与级联,一切外键应用场景必须在应用层解决。(外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞)
  12. 【强制】禁止使用存储过程,存储过程难以调试和扩展,没有移植性。
  13. 【强制】禁止使用触发器,相关场景在业务层解决。
  14. 【推荐】尽量避免复杂的SQL,如果有必要,可以将复杂SQL拆成多条简单的SQL执行。
  15. 【推荐】IN操作能避免则避免,如果避免不了,要仔细评估IN的集合元素,控制在1000以内。
  16. 【推荐】尽量避免LIKE左模糊或全模糊查询。
  17. 【推荐】如果有order by的场景,注意利用索引的有序性。
  18. 【推荐】利用覆盖索引来进行查询操作,避免回表。
  19. 【推荐】SQL优化的目标:至少达到range级别,要求ref级别,如果是consts最好。
  20. 【推荐】有合理的读写分离控制。
  21. 【推荐】对相同数据对象的操作,统一封装到model中,供上层统一调用。

数据库运维与安全

  1. 【强制】不允许root帐号远程访问,并且设置强密码,不向业务公开。
  2. 【强制】业务访问最小化权限限制,面向业务系统使用的帐号,只允许SELECT/INSERT/UPDATE/DELETE权限范围。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目的
  • 适用范围
  • 数据库设计规范
  • 数据库应用开发规范
  • 数据库运维与安全
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档