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

五、规范详细说明

待补充。。。

六、修订记录

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266