MySQL学习-命名规范以及DDL的原子化

112 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

前言

上篇我们学习了MySQL的修改,重命名,删除,清空表。有兴趣的小伙伴可以阅读(# MySQL学习-操作表)。
下面学习MySQL的名规范以及MySQL8.0新特性-DDL的原子化。

规范

参考: TRUNCATE TABLE比DELETE速度快,且使用的系统和事务日志资源少,但TRUNCATE无事务且不触发TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。
说明: TRUNCATE TABLE在功能上与不带WHERE语句的DELETE语句相同。

MySQL字段命名

参考阿里巴巴《Java开发手册》中的MySQL字段命名。

  • [强制] 表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。
    • 正例:aliyun_admin,rdc_config,level3_name
    • 反例:AliyunAdmin,rdcConfig,level_3_name
  • [强制] 禁用保留字,如desc、range、match、delayed等,请参考MySQL官方保留字。
  • [强制] 表必备三字段:id,gmt_create,gmt_modified。
    • 说明:其中id必为主键,类型为BIGINT UNSINGNED、单表时自增、步长为1。gmt_create,gmt_modified的类型均为DATETIME类型,前者现在时表示主动式创建,后者过去分词表示被动式更新。
  • [推荐] 表的命名最好是遵循“业务名称_表的作用”。
    • 正例:alipay_task、force_project、trade_config
  • [推荐] 库名与应用名称尽量一致。
  • [参考] 合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。
    • 正例:无符号值可以避免误存负数,且扩大了表示范围。

清空表、删除表操作需谨慎

表删除操作将表的定义和表中的数据一起删除,并且MySQL在执行删除操作时,不会有任何的确认信息提示,因此执行删除操作时应当慎重。在删除表前,最好对表中的数据进行备份,这样当操作失误时可以对数据进行恢复,以免造成无法挽回的后果。
同样的,在使用ALTER TABLE进行表的基本修改操作时,在执行操作过程之前,也应该确保对数据进行完整的备份,因为数据库的改变是无法撤销的,如果添加了一个不需要的字段,可以将其删除;相同的,如果删除了一个需要的列,该列下面的所有数据都将会丢失。

MySQL8.0新特性-DDL的原子化

在MySQL8.0版本中,InnoDB表的DDL支持事务完整性,即DDL操作要么成功要么回滚。DDL操作回滚日志写入到data dictionary数据字典表mysql.innodb_ddl_log(该表是隐藏的表,通过show tables无法看到)中,用于回滚操作。通过设置参数,可将DDL操作日志打印输出到MySQL错误日志中。