MySQL 开发应用规范(信息集团统一下发)

编写目的:

为避免开发过程产生不适当的 SQL 内容,导致创建的数据库对象过程中出现问题或者数据库使用中耗费更多系统资源,特制定本规范文档作为集团信息中心(xxx)MySQL数据库的 SQL 开发规范,
以保障各系统数据库高效稳定运行。

二、适用范围

本规范文档适用于集团信息中心(xxx)所有使用 MySQL 数据库的开发、测试、生产环境。所有使用 MySQL 数据库的开发、测试及 DBA 人员均要阅读本文档。
建议开发人员和测试人员阅读“SQL 规范要求”内容;DBA 人员详细阅读“SQL 规范要求”及“规范详细说明”内容。

三、术语

序号 名词 名词解释 备注
1 最左原则 又称“最左前缀原则”或“ 最左前缀匹配原则”,指 MySQL 创建复合索引的规则是首先会对复合索引的最左边的,也就是第一个字段的数据进行排序,在第一个字段的排序基础上,然后再对后面第二个字段进行排序。 MySQL 索引规则中要求复合索引中要想使用第二个字段,则必须先使用到第一个字段。
2 强制级别 该级别务必遵守,是 MySQL 开发过程的“军规”,违反该级别规则禁止上线。
3 强烈建议级别 该级别介于强制与建议级别之间,因较难量化及考量,故不适合做强制要求,但进行开发时也应结合业务特点来遵守该级别规定。

三、SQL 规范要求

(一) 强制级别

  1. 同种用途的字段在不同表中保持同一字段定义。【详情】

  2. 每个表必须有主键。

  3. 表引擎选用 INNODB 引擎;字符集统一使用 UTF8。【详情】

  4. 表及字段必须有 COMMENT 注释说明,而且注释禁止使用半角(英文)分号。【详情】

  5. 在满足需求的提前下,选择性能更高的字段类型。按性能从好到差的排序为:

TINYINT>SMALLINT>MEDIUMINT>INT>BIGINT>CHAR/VARCHAR>TEXT/BLO B;【详情】

  1. 根据字段实际存储情况选择合适的字段长度,在满足业务需求前提下,字段长度尽可能最小长度的定义。【详情】

例如:能使用 VARCHAR(10)则不使用 VARCHAR(100)。VARCHAR(N),N 表示的是字符数不是字节数,比如 VARCHAR(255),可以最大可存储 255 个汉字,需要根据实际的宽度来选择 N。

  1. 每个表必须要有 update_time 字段。【详情】

update_time 字段定义:

update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间'

  1. 禁止冗余索引、重复索引。【详情】

合理创建复合索引(避免冗余);如:索引(a,b,c) 相当于索引(a)、(a,b)和(a,b,c)。

  1. 查询数据时,禁止使用“SELECT *”,需给出明确的字段。【详情】

  2. INSERT 语句必须列出所有使用的字段名。【详情】

  3. UPDATE 和 DELETE 必须要检查是否需要带 WHERE 条件,防止整张表被误修改或误删除。

  4. 在进行结果集合并(UNION 或 UNION ALL)时,若无需对结果进行去重,则用 UNION ALL(UNION 有去重开销)。

  5. WHERE 后面条件,如果用到复合索引,注意 MySQL 遵循最左原则。【详情】

  6. 所有数据库对象(库名,表名,字段名等)的命名,不得使用汉字及特殊符号(包括空格、逗号及常用 SQL 关键字等)。

  7. 生产环境数据库迁移中使用的表 bc_stop_capture 表结构为

CREATE TABLE IF NOT EXISTS bc_stop_capture(tableName VARCHAR(50)

PRIMARY KEY);

生产环境数据库的迁移操作,步骤如下:

(例,迁移对象表为 inventory_book 时)

START TRANSACTION; INSERT INTO bc_stop_capture DELETE FROM inventory_book DELETE FROM inventory_book COMMIT;

VALUES('inventory_book'); WHERE bill_date < '2016-06-30'; WHERE tableName='inventory_book';

注意:1. 表 bc_stop_capture 在数据迁移完成后不能删除。

数据迁移操作必须按照迁移步骤执行,否则下游各系统会将迁移动作识别为删除操作。

(二) 强烈建议级别

  1. 分表的分片字段无需建立索引。因该分片字段的数据内容均一样,建立索引无意义。

  2. WHERE 后面条件,需防止字段类型被隐式强制转换。【详情】

  3. SQL 语句中尽量少用 JOIN,而应该在程序中组装数据,让 SQL 更简单。【详情】

  4. 将大表中使用频率高的字段和使用频率低的字段,拆分成两张表存储。【详情】

(三) 建议级别

  1. 所有数据库对象(库名,表名,字段名等)不建议超过 30 个字符。

  2. 所有数据库对象(库名,表名,字段名等)应全部为小写,单词之间使用下划线“_”分割。

  3. 所有数据库对象(库名,表名,字段名等)应使用富有意义的英文,一般情况下不建议使用拼音命名。

历史表以“_his”为后缀。例如:inventory_his

五、规范详细说明

待补充。。。

六、修订记录

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章