hincky的主页 hincky的主页
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)

Hincky

当有趣的人,做想做的事
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)
  • 数据库

    • sql

    • MySQL开发规范

      • 规范快速指引
        • 完整开发规范
        • 简版开发规范
      • mysql

      • MySQL调优

      • kafka

    • 网络协议以及抓包工具

    • Git笔记

    • 技术分享

    • Oauth2

    • 计算机相关技术
    • 数据库
    • MySQL开发规范
    zerolee1993
    2022-11-11

    简版开发规范

    离线版下载 (opens new window)

    # 建表规范

    • 使用自增 id 作为主键

    • 使用 innodb 引擎

    • 使用统一编码 utf8mb4

    • 尽量将所有列定义为NOT NULL

    • 所有表和字段都要添加注释,修改字段含义或对字段表示的状态追加时,需要及时更新字段注释

    • 存储业务数据的表,建议不要物理删除,添加字段 is_deleted 进行逻辑删除

    • 尽量避免在表中建立预留字段

    • 适当进行反范式化设计,便于查询和索引优化

    • 尽量做到冷热数据分离,减小表的宽度

    • 单表行数超过 500 万行或者单表容量超过 2GB ,才推荐进行分库分表

    • 避免在数据库中存储图片、文件等二进制数据


    # 命名规范

    • 库名与应用名保持一致

    • 常用业务字段团队内部需要使用统一命名,具体需参考团队规范

    • 表名和字段名,必须使用小写字母或数字,下划线分割,禁止出现数字开头,禁止两个下划线中间只出现数字见名知意,不可超过32字符

    • 表名不使用复数名词

    • 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 UNSIGNED TINYINT ( 1表示是,0表示否)

    • 禁止使用 MySQL 保留字,如 desc、range、match、delayed 等(请参考MySQL 官方保留字 (opens new window))

    • 主键索引使用 pk_前缀;唯一索引使用 uk_前缀;普通索引使用 idx_前缀

    • 不同表存储相同数据的列(关联列)的列名和列类型必须完全一致

    • 临时库、表名必须以 bak_ 为前缀,并以 _yyyyMMdd 实时日期为后缀。例如 tmp_test01_20190409

    • 备份库、表必须以 bak_ 为前缀,并以 _yyyyMMdd 实时日期为后缀。例如 bak_test01_20190409


    # 类型选择规范

    • 字段可以使用多种数据类型时,优先考虑数字类型,其次为日期或二进制类型,最后是字符类型

    • 整数型选择能符合需求的最短列类型,如果为非负数,必须声明 UNSIGNED

    • 实数类型使用 DECIMAL,禁止使用 FLOAT 和 DOUBLE

    • 禁止使用字符串类型代替日期类型,日期占用空间小,便于查找过滤,有丰富的处理函数

    • 使用 TINYINT 代替 ENUM

    • 使用 INT UNSIGNED 存储 IPV4

    • 使用 VARCHAR 时 选择能符合需求的最小长度

    • 使用 VARBINARY 存储大小写敏感的变长字符串,VARBINARY 默认区分⼤小写,没有字符集概念,速度快


    # 索引规范

    • 业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引

    • 在 VARCHAR 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据 实际文本区分度决定索引长度即可

    • 每张表索引不要超过5个

    • 避免建立冗余索引和重复索引

    • 对于频繁查询优先考虑使用覆盖索引


    # SQL 编写规范

    • 避免数据类型的隐式转换,会导致索引失效

    • 禁止使用 SELECT *

    • 使用 IN 代替 OR

    • 不使用反向查询,如 NOT IN 和 NOT LIKE

    • 禁止使用 ORDER BY RAND() 进行随机排序

    • 禁止在 WHERE 从句中对列进行函数转换和计算

    • 禁止 SQL 中存放业务逻辑

    • 使用用 UNION ALL 代替 UNION

    • 禁止在数据库中存储明文密码

    • 避免使用子查询,可以把子查询优化为 JOIN 操作

    • 超过三个表禁止 JOIN,需要 JOIN 的字段,数据类型必须绝对一致

    • 超过 100w 行的批量写操作,要分批多次进行操作

    • 减少与数据库的交互次数

    • 合理拆分复杂的大 SQL 为多个小 SQL

    • 如果有 ORDER BY 的场景,请注意利用索引的有序性

    • 页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决

    • 禁止在线上数据库做压力测试

    • 禁止从开发环境,测试环境直接连接生产环境数据库


    # 数据操作规范

    • 禁止使用不含有字段列表的 INSERT 语句

    • UPDATE 少量数据时,先使用 SELECT 将需要更改的数据查出,并在 UPDATE 语句的 WHERE 条件中添加主键限制

    • UPDATE 大量数据时,先对数据进行备份

    • 禁止单条 SQL 语句同时更新多个表

    • 修改字段时,将多个 ALERT 语句合并为一个执行

    • 若需大批量插入或更新,执行语句很多,建议每隔三四百行添加 SELECT SLEEP(1); 语句

    编辑 (opens new window)
    #MySQL开发规范
    完整开发规范
    数据库三范式

    ← 完整开发规范 数据库三范式→

    最近更新
    01
    人生前期重要的能力
    05-17
    02
    防火墙命令
    04-11
    03
    docker-compose部署mysql主从集群
    03-22
    更多文章>
    Theme by Vdoing | Copyright © 2022-2023 Hincky | MIT License | 粤ICP备2022120427号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式