【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化

【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化

  • [阿里 MySQL 命名规范](#阿里 MySQL 命名规范)
  • [MySQL8 DDL的原子化](#MySQL8 DDL的原子化)

阿里 MySQL 命名规范

  • 强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。
    • 正例:aliyun_admin,rdc_config,level3_name
    • 反例:AliyunAdmin,rdcConfig,level_3_name
  • 强制】禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方保留字。
  • 强制】表必备三字段:id, gmt_create, gmt_modified。
    • 说明:其中 id 必为主键,类型为BIGINT UNSIGNED、单表时自增、步长为 1。gmt_create, gmt_modified 的类型均为 DATETIME 类型,前者现在时表示主动式创建,后者过去分词表示被动式更新
  • 推荐】表的命名最好是遵循 "业务名称_表的作用"。
    • 正例:alipay_task 、 force_project、 trade_config
  • 推荐】库名与应用名称尽量一致。
  • 【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。
对象 年龄区间 类型 字节 表示范围
150岁之内 tinyint unsigned 1 无符号值:0到255
数百岁 smallint unsigned 2 无符号值:0到65535
恐龙化石 数千万年 int unsigned 4 无符号值:0到约43亿
太阳 约50亿年 bigint unsigned 8 无符号值:0到约10的19次方

MySQL8 DDL的原子化

MySQL 8.0引入了DDL(数据定义语言)的原子性特性,通过统一数据字典DD和DDL_LOG机制来确保DDL操作的原子性。

  1. 原子DDL的定义:原子DDL语句将数据字典更新、存储引擎操作和与DDL操作相关联的二进制日志写入组合成单个原子操作。这意味着,即使服务器在操作过程中停止运行,操作也可以提交,将适用的更改保存到数据字典、存储引擎和二进制日志中,或者回滚。

  2. 数据字典的统一:在MySQL 8.0之前,元数据存储在元数据文件、非事务表和存储引擎特定的字典中,这需要中间提交。MySQL 8.0引入了统一的数据字典DD,并废弃了server层的元数据(如.frm、.opt、.par、.trg等),将InnoDB的元数据抽象出一条DD接口供server层和InnoDB层共用。这消除了中间提交的障碍,使得将DDL语句操作重构为原子操作成为可能。

  3. DDL_LOG机制:为了确保DDL操作的原子性,MySQL 8.0还引入了一套DDL_LOG机制。在执行DDL的过程中,会记录DDL操作到DDL_LOG表中。DDL_LOG表是InnoDB引擎表,通过保证DDL_LOG数据与DD数据字典修改达成一致,来解决DD数据字典修改、引擎层修改和写binlog一致性问题。在DDL事务提交后,会读取DDL_LOG内容并进行回放执行,以完成DDL操作的收尾动作。

  4. 原子DDL的特性

    • 原子DDL支持表DDL语句和非表DDL语句。与表相关的DDL操作需要存储引擎支持,目前只有InnoDB存储引擎支持原子DDL。
    • DDL语句,无论是原子的还是其他的,都会隐式地结束当前会话中任何活动的事务。这意味着DDL语句不能在另一个事务中执行,不能在事务控制语句(如START TRANSACTION)中执行,或者与同一事务中的其他语句结合使用。
    • 原子化的DDL操作在执行过程中,如果MySQL服务突然停止,不会像之前的版本那样生成一个报错文件,而是会回滚操作。

综上所述,遵循阿里MySQL命名规范可以提高数据库的可读性和可维护性,而MySQL8 DDL的原子化特性则确保了DDL操作的一致性和可靠性。

相关推荐
这个DBA有点耶16 小时前
数据库迁移怎么做到“零翻车“:金仓 KDMS/KDTS/KFS 工具链实测
数据库·架构·dba
名字还没想好☜17 小时前
Next.js 用 Server Components 直连数据库:去掉 API 层的边界,和三条别踩的安全红线
前端·javascript·数据库·安全·react·next.js
迷迭香yy17 小时前
行业板块轮动因子实战从板块资金到因子建模的本地化Python全流程
数据库·人工智能·python
SelectDB18 小时前
抖音集团 实时数据仓库:Apache Doris / SelectDB 的技术能力与实践
数据库
SelectDB18 小时前
网易 日志与时序数据分析:Apache Doris / SelectDB 的技术能力与实践
数据库
weixin_5394467818 小时前
Navicat Premium 17报缺少ODBC驱动
数据库
这个DBA有点耶18 小时前
迁移中的数据一致性挑战:如何确保百万行数据“搬得对”
mysql·架构·dba
哦虎!19 小时前
【数据库】事务
java·数据库·mysql
倔强的石头_19 小时前
时序数据库的难题不只在写入速度
数据库
IT古董21 小时前
【WMS学习笔记系列】01-需求分析
大数据·数据库