本文為您介紹遷移 MySQL 資料庫的資料至 OceanBase 資料庫 MySQL 租戶時,MySQL 資料庫執行的 ALTER TABLE DDL 支援被資料轉送的 DDL 同步群組件轉換,但 OceanBase 資料庫 MySQL 租戶不支援執行的情境。
行內 CHECK 運算式中引用了其它列
MySQL 資料庫
不支援
ALTER TABLE ADD COLUM
行內CHECK
運算式中引用了其它列(所有類型)。支援
ALTER TABLE MODIFY/CHANGE COLUM
行內CHECK
運算式中引用了其它列(所有類型)。
OceanBase 資料庫 MySQL 租戶
不支援
ALTER TABLE ADD COLUM
行內CHECK
運算式中引用了其它列(所有類型)。不支援
ALTER TABLE MODIFY/CHANGE COLUM
行內CHECK
運算式中引用了其它列(所有類型)。重要由於 OceanBase 資料庫 MySQL 租戶本身的限制,可能存在其它不支援的 CHECK 運算式。
修改列的類型
MySQL 資料庫和 OceanBase 資料庫 MySQL 租戶的被修改列在有約束的情況下,對修改後的欄位類型的限制有所不同。詳情請參見 有約束的列修改類型。
MySQL 資料庫和 OceanBase 資料庫 MySQL 租戶的被修改列在沒有約束的情況下,對修改後的欄位類型的限制有所不同。詳情請參見 沒有約束的列修改類型。
修改列的長度
MySQL 資料庫和 OceanBase 資料庫 MySQL 租戶的被修改列在有約束的情況下,對修改列長度的限制有所不同。詳情請參見 有約束的列修改長度。
MySQL 資料庫和 OceanBase 資料庫 MySQL 租戶的被修改列在沒有約束的情況下,對修改列長度的限制有所不同。詳情請參見 沒有約束的列修改長度。
修改列 NULLABLE 屬性
MySQL 資料庫
非約束情況下,支援通過 CHANGE / MODIFY COLUMN 將 NULLABLE 修改為 NOT NULL,支援修改 NOT NULL -> NULLABLE、NULLABLE -> NULLABLE、NOT NULL -> NOT NULL。
重要如果 NULLABLE 情況下存在 NULL 的資料,將無法修改 NULLABLE 為 NOT NULL。
OceanBase 資料庫 MySQL 租戶
非約束情況下,不支援通過 CHANGE / MODIFY COLUMN 將 NULLABLE 修改為 NOT NULL。
非約束情況下,支援修改 NOT NULL -> NULLABLE、NULLABLE -> NULLABLE、NOT NULL -> NOT NULL。
修改字元集或者 COLLATION
MySQL 資料庫:支援
OceanBase 資料庫 MySQL 租戶:不支援
刪除有約束的列
MySQL資料庫和 OceanBase 資料庫 MySQL 租戶對於刪除有約束的列的操作限制有所不同,詳情請參見 刪除有約束的列。
CHANGE / MODIFY COLUMN NOT NULL 不支援和 COMMENT 語句同時存在
樣本如下:
ALTER TABLE T MODIFY C INT NOT NULL, COMMENT 'INT COLUMN';
MySQL 資料庫
非約束情況下,如果存在 COMMENT 語句,支援通過 CHANGE / MODIFY COLUMN 指定修改屬性 NOT NULL、NULLABLE。
有 PK、UK、KEY 和 FULLTEXT 約束的情況下,如果存在 COMMENT 語句,指定 NULL 執行報錯,支援 NOT NULL。
OceanBase 資料庫 MySQL 租戶
無論是否有約束,存在 COMMENT 語句的情況下,均不支援通過 CHANGE / MODIFY COLUMN 指定修改屬性 NULLABLE -> NOT NULL、NOT NULL -> NOT NULL。
非約束情況下,支援指定修改屬性 NOT NULL -> NULLABLE、NULLABLE -> NULLABLE。
有 PK、UK、KEY 和 FULLTEXT 約束的情況下,如果存在 COMMENT 語句,指定修改屬性 NOT NULL -> NULLABLE,執行不報錯但未生效。