MySQL 9.0 版本資訊
在 線上 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=COPY
或old_alter_table=1
的操作,以便在特定情況下需要精確的向後相容性時強制執行資料表複製行為。