Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Simplifying DDL Statements with Online DDL

17.12.6 使用在线 DDL 简化 DDL 语句

在引入在线 DDL之前,常见的做法是将多个 DDL 操作组合到一个ALTER TABLE语句中。因为每个ALTER TABLE语句都涉及到表的复制和重建,因此更高效地将多个变化应用于同一个表,因为这些变化可以在单个重建操作中完成。然而,这也意味着 SQL 代码涉及 DDL 操作变得更难以维护和重用不同的脚本。如果每次变化都不同,你可能需要构建新的复杂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,强制使用表复制行为,以便在特殊场景中实现精确的向后兼容性。