MySQL從5.6.17以後,支持在線修改表結構操作(online ddl),即在變更表結構的過程中,不阻塞dml和dql操作.
根據操作過程中是否需要表拷貝,online ddl可分爲下面兩大類:
1.需要表拷貝的 ddl 操作:
增加、刪除、重排列。
增加、刪除主鍵。
改變表的 ROW_FORMAT 或 KEY_BLOCK_SIZE屬性。
改變的字段的null狀態。
執行OPTIMIZE TABLE,優化表。
使用 FORCE 選項重建表。
使用ALTER TABLE ... ENGINE=INNODB 語句。
首次創建全文索引。
2.不需要表拷貝的 ddl 操作:
創建、增加、刪除普通索引。
創建第二個及後續的全文索引。
爲字段設置默認值。
改變auto-increment值。
刪除外鍵約束。
添加外鍵約束( 只有在foreign_key_checks=off時)
僅僅改變列的名稱
設置表的持續統計選項(STATS_PERSISTENT, STATS_AUTO_RECALC STATS_SAMPLE_PAGES)
特別說明:全文索引需要特別注意,創建了全文索引的表基本上不支持在線ddl操作。
具體說明參考mysql官方文檔:http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html#innodb-online-ddl-summary-grid