Mysql开发规范

 

说明

  1. 是否遵照共同的开发规范是决定产品成败的关键,因此编写规范的目的是让全部数据开发人员在开发过程当中有依可循。

数据库库表设计规范

  1. 猪八戒全部的数据库、表原则上统一使用utf8编码,若是须要使用emoji表情请使用utf8mb4编码。
  2. 全部数据库名以zhubajie_打头,库名、表名必须使用下划线分割开,所有用小写字母,表名以库名的首字母缩写做为前缀(如zhubajie_market库下全部的表都以mk_打头),以保证该表的全局惟一性。
  3. 库名表名都是用名词,不使用动词,能见名知意。
  4. 数据库引擎建议使用innodb 尽可能不要使用myisam,日志尽可能使用tokudb。
  5. 存储精度浮点数必须使用decimal替代float和double。
  6. 非负值的数字统一使用unsigned类型存储。
  7. 必须使用int unsigned存储IPV4。
  8. 整形定义中,不添加字段长度,好比使用int而不是int(5),即使定义了对字段长度、占用空间也没有意义。
  9. 能使用短数据类型的尽可能使用短数据类型。好比取值范围是0-255时,使用tinyint unsigned。
  10. 使用tinyint类型代替enum类型(记录状态)。
  11. 尽量不适用text,禁止使用blob类型。若是必须使用text和blob类型,建议把该字段拆分独立成一个表。
  12. 新版本的varchar(N)其中N是字节数而不是字符数。控制在255内。
  13. 存储年使用year类型。
  14. 存储日期使用date类型,默认值禁止使用0000-00-00,正确的应该使用linux最小时间戳1970-01-01,或者当前时间戳CURRENT_TIMESTAMP。
  15. 使用精确时间戳(精确到秒)尽可能使用timestamp类型,由于timestamp使用4字节,datetime使用8字节。
  16. 必须将字段定义为not null,须要null时设置默认值(除text以外)。
  17. 禁止在数据库中使用varbinary、blob存储图片、文件等。
  18. 新建表必须添加create_time(建立时间)、update_time(更新时间),类型为timestamp,默认值为CURRENT_TIMESTAMP。例如:
    `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '建立时间',
    `update_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  19. 建表语句示例mysql

    CREATE TABLE `gift_test` ( 
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `category_id` int(11) DEFAULT NULL COMMENT '礼品类别id', 
      `securities` varchar(100) DEFAULT NULL COMMENT '券号', 
      `gift_isdelte` int(11) DEFAULT '2' COMMENT '是否删除【1是,2否】', 
      `gift_sendstatus` int(11) DEFAULT '1' COMMENT '礼品发送状态【1待发送,2已发送,3发送失败】', 
      `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '建立时间',
      `update_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
      PRIMARY KEY (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '礼品发放';linux


索引设计规范

  1. 索引的命名统一以idx_开头,后面包括索引字段名字,分别如下划线分隔,每个字段只能占用一个名字位。如idx_id_name(这是一个符合索引,包含了id和name两个字段)
  2. 索引名称必须使用小写。
  3. 复合索引的字段数不能超过5个。
  4. 单表的索引数量尽可能控制在5个之内。
  5. 必须设置惟一主键,尽可能使用自增id做为主键。
  6. 联合索引的字段排列顺序以去重后字段的数值的个数大小排序前后顺序。好比表mk_task有id,name,id有50000个独立值,name有5000个独立值,那么,顺序是id在name前面,创建的索引是idx_id_name。
  7. Order by、distinct、group by后的字段尽可能创建索引。
  8. 状态字段创建索引,好比性别字段(只有2个选项)。
  9. 根据update、delete的where尽可能使用有索引的字段或主键。
  10. 超过20字节的varchar字段建议创建前缀索引。
  11. 合理建立联合索引(避免冗余),(a,b,c)至关于(a)、(a、b)、(a、b、c)。
  12. 不能使用数据库外键,由程序保证。
  13. Text类型字段不能使用索引。
  14. where语句中必须使用合适的数据类型,避免mysql进行隐式类型转换。如id列定义成了varchar(20),咱们的sql写成select name from table where id=100;这样的sql会发生隐式类型转换。
  15. 尽可能不使用mysql函数,把逻辑实如今应用程序里。
  16. 禁止使用整表count。
  17. 禁止使用存储过程、视图、事件、触发器。

SQL语句开发规范

  1. 控制sql的in列表值小于50个。
  2. where语句中必须使用合适的数据类型,避免mysql进行隐式类型转换。
  3. 禁止使用select *,select只获取须要的字段。
  4. insert必须显示指明字段名称,如:不能使用insert into table values();必须使用insert into addressbook(fname,lname,phone,fax,email) values('Rob',Rabbit,'674 1536','382 8364','rob@some.domain');这种方式。
  5. 避免使用不等于条件,where条件中的不等于不能使用索引。
  6. 合理使用分页提升分页效率,避免使用大的偏移量分页,如select id from user limit 1000,10。
  7. 统计表中记录使用count(*),不适用count(primary_key)和count(1)。
  8. 禁止jira提交的任何sql脚本包含drop语句,若是上线确实须要drop表,请找dba单独说明。
  9. 全部生产环境的sql都须要提jira申请,而后再执行。
  10. 线上统计性质sql,left join表数量不能超过3个。
  11. 禁止使用强制索引,如 select id from user use index(idx_user_id) where user_id = 123;
  12. 对同一个表的屡次alter操做必须合并为一次操做,如 alter table t add column b varchar(10),add index idx_aa(aa);sql

Mysql开发规范

说明

  1. 是否遵照共同的开发规范是决定产品成败的关键,因此编写规范的目的是让全部数据开发人员在开发过程当中有依可循。

数据库库表设计规范

  1. 猪八戒全部的数据库、表原则上统一使用utf8编码,若是须要使用emoji表情请使用utf8mb4编码。
  2. 全部数据库名以zhubajie_打头,库名、表名必须使用下划线分割开,所有用小写字母,表名以库名的首字母缩写做为前缀(如zhubajie_market库下全部的表都以mk_打头),以保证该表的全局惟一性。
  3. 库名表名都是用名词,不使用动词,能见名知意。
  4. 数据库引擎建议使用innodb 尽可能不要使用myisam,日志尽可能使用tokudb。
  5. 存储精度浮点数必须使用decimal替代float和double。
  6. 非负值的数字统一使用unsigned类型存储。
  7. 必须使用int unsigned存储IPV4。
  8. 整形定义中,不添加字段长度,好比使用int而不是int(5),即使定义了对字段长度、占用空间也没有意义。
  9. 能使用短数据类型的尽可能使用短数据类型。好比取值范围是0-255时,使用tinyint unsigned。
  10. 使用tinyint类型代替enum类型(记录状态)。
  11. 尽量不适用text,禁止使用blob类型。若是必须使用text和blob类型,建议把该字段拆分独立成一个表。
  12. 新版本的varchar(N)其中N是字节数而不是字符数。控制在255内。
  13. 存储年使用year类型。
  14. 存储日期使用date类型,默认值禁止使用0000-00-00,正确的应该使用linux最小时间戳1970-01-01,或者当前时间戳CURRENT_TIMESTAMP。
  15. 使用精确时间戳(精确到秒)尽可能使用timestamp类型,由于timestamp使用4字节,datetime使用8字节。
  16. 必须将字段定义为not null,须要null时设置默认值(除text以外)。
  17. 禁止在数据库中使用varbinary、blob存储图片、文件等。
  18. 新建表必须添加create_time(建立时间)、update_time(更新时间),类型为timestamp,默认值为CURRENT_TIMESTAMP。例如:
    `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '建立时间',
    `update_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  19. 建表语句示例数据库

    CREATE TABLE `gift_test` ( 
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `category_id` int(11) DEFAULT NULL COMMENT '礼品类别id', 
      `securities` varchar(100) DEFAULT NULL COMMENT '券号', 
      `gift_isdelte` int(11) DEFAULT '2' COMMENT '是否删除【1是,2否】', 
      `gift_sendstatus` int(11) DEFAULT '1' COMMENT '礼品发送状态【1待发送,2已发送,3发送失败】', 
      `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '建立时间',
      `update_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
      PRIMARY KEY (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '礼品发放';dom


索引设计规范

  1. 索引的命名统一以idx_开头,后面包括索引字段名字,分别如下划线分隔,每个字段只能占用一个名字位。如idx_id_name(这是一个符合索引,包含了id和name两个字段)
  2. 索引名称必须使用小写。
  3. 复合索引的字段数不能超过5个。
  4. 单表的索引数量尽可能控制在5个之内。
  5. 必须设置惟一主键,尽可能使用自增id做为主键。
  6. 联合索引的字段排列顺序以去重后字段的数值的个数大小排序前后顺序。好比表mk_task有id,name,id有50000个独立值,name有5000个独立值,那么,顺序是id在name前面,创建的索引是idx_id_name。
  7. Order by、distinct、group by后的字段尽可能创建索引。
  8. 状态字段创建索引,好比性别字段(只有2个选项)。
  9. 根据update、delete的where尽可能使用有索引的字段或主键。
  10. 超过20字节的varchar字段建议创建前缀索引。
  11. 合理建立联合索引(避免冗余),(a,b,c)至关于(a)、(a、b)、(a、b、c)。
  12. 不能使用数据库外键,由程序保证。
  13. Text类型字段不能使用索引。
  14. where语句中必须使用合适的数据类型,避免mysql进行隐式类型转换。如id列定义成了varchar(20),咱们的sql写成select name from table where id=100;这样的sql会发生隐式类型转换。
  15. 尽可能不使用mysql函数,把逻辑实如今应用程序里。
  16. 禁止使用整表count。
  17. 禁止使用存储过程、视图、事件、触发器。

SQL语句开发规范

  1. 控制sql的in列表值小于50个。
  2. where语句中必须使用合适的数据类型,避免mysql进行隐式类型转换。
  3. 禁止使用select *,select只获取须要的字段。
  4. insert必须显示指明字段名称,如:不能使用insert into table values();必须使用insert into addressbook(fname,lname,phone,fax,email) values('Rob',Rabbit,'674 1536','382 8364','rob@some.domain');这种方式。
  5. 避免使用不等于条件,where条件中的不等于不能使用索引。
  6. 合理使用分页提升分页效率,避免使用大的偏移量分页,如select id from user limit 1000,10。
  7. 统计表中记录使用count(*),不适用count(primary_key)和count(1)。
  8. 禁止jira提交的任何sql脚本包含drop语句,若是上线确实须要drop表,请找dba单独说明。
  9. 全部生产环境的sql都须要提jira申请,而后再执行。
  10. 线上统计性质sql,left join表数量不能超过3个。
  11. 禁止使用强制索引,如 select id from user use index(idx_user_id) where user_id = 123;
  12. 对同一个表的屡次alter操做必须合并为一次操做,如 alter table t add column b varchar(10),add index idx_aa(aa);函数

相关文章
相关标签/搜索