MySQL 5.7版本说明
在引入在线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;
并将其分解为可以独立测试和执行的更简单的部分,例如:
增加表1的索引(c1);为表t1添加唯一索引i2(c2)ALTER TABLE t1 CHANGE c4_old_name c4_new_name INTEGER UNSIGNED NOT NULL;
你仍然可以使用multi-partALTER TABLE
声明:
必须按特定顺序执行的操作,例如创建一个索引,后面跟着一个使用该索引的外键约束。
所有操作都使用相同的具体方法
锁
从句,你想要作为一个团队成功或失败。不能原地执行的操作,即仍然使用表复制方法的操作。
指定的操作
算法=复制
或old_alter_table = 1
,如果需要在特定场景中实现精确的向后兼容,则强制执行表复制行为。