暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[ACDU 翻译] MySQL 15.12.6 使用在线 DDL 简化 DDL 语句

原创 由迪 2022-06-08
336

在引入在线 DDL之前,将许多 DDL 操作组合到一个ALTER TABLE 语句中是常见的做法。因为每条ALTER TABLE 语句都涉及复制和重建表,所以一次对同一个表进行多次更改会更有效,因为这些更改都可以通过对表的一次重建操作来完成。缺点是涉及 DDL 操作的 SQL 代码更难维护和在不同脚本中重用。如果每次具体更改都不同,您可能必须ALTER TABLE为每个略有不同的场景构建一个新的复合体。

对于可以在线完成的 DDL 操作,您可以将它们分成单独ALTER TABLE 的语句,以便于编写和维护,而不会牺牲效率。例如,您可能会采用复杂的语句,例如:

ALTER TABLE t1 ADD INDEX i1(c1), ADD UNIQUE INDEX i2(c2), CHANGE c4_old_name c4_new_name INTEGER UNSIGNED;
复制

并将其分解为可以独立测试和执行的更简单的部分,例如:

ALTER TABLE t1 ADD INDEX i1(c1); ALTER TABLE t1 ADD UNIQUE INDEX i2(c2); ALTER TABLE t1 CHANGE c4_old_name c4_new_name INTEGER UNSIGNED NOT NULL;
复制

您可能仍将多部分ALTER TABLE语句用于:

  • 必须按特定顺序执行的操作,例如创建索引,然后是使用该索引的外键约束。
  • 操作都使用相同的特定LOCK 子句,您希望作为一个组成功或失败。
  • 无法在线执行的操作,即仍然使用表复制方法的操作。
  • 您指定的操作 ALGORITHM=COPYold_alter_table=1,如果需要在特定场景中实现精确的向后兼容性,则强制执行表复制行为。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论