文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  使用在线 DDL 简化 DDL 语句

17.12.6 使用在线 DDL 简化 DDL 语句

在引入 在线 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 的操作,以在需要在特殊场景中实现精确向后兼容性的情况下强制执行表复制行为。