本文為您介紹遷移 MySQL 資料庫的資料至 OceanBase 資料庫 MySQL 租戶時,ALTER TABLE DDL 欄位操作支援的轉換範圍。
總覽
ALTER TABLE tbl_name
[alter_option [, alter_option] ...]
alter_option: {
ADD [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
| ADD [COLUMN] (col_name column_definition,...)
| ALTER [COLUMN] col_name {
SET DEFAULT {literal | (expr)}
| SET {VISIBLE | INVISIBLE}
| DROP DEFAULT
}
| CHANGE [COLUMN] old_col_name new_col_name column_definition
[FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
| ORDER BY col_name [, col_name] ...
| RENAME COLUMN old_col_name TO new_col_name
}
支援的範圍
支援 ADD COLUMN 來添加列(多列),列定義的詳情請參見 建立列。支援指定 FIRST | AFTER 關鍵字。
支援修改欄位的預設值:
ALTER COLUMN SET DEFAULT
。支援刪除欄位的預設值:
ALTER COLUMN DROP DEFAULT
。支援修改列:
CHANGE COLUMN
和MODIFY COLUMN
。支援刪除列:
DROP COLUMN
。
不支援的範圍
如果同步的 DDL 包含以下不支援的定義,則整個建表語句會轉換失敗(輸出空)。
不支援修改列的可見度:
ALTER COLUMN SET VISIBLE | INVISIBLE
。不支援
ORDER BY col_name
。不支援重新命名列:
RENAME COLUMN
。ALTER TABLE t RENAME COLUMN d TO g;
忽略的屬性
如果同步的 DDL 包含以下不支援的定義,則這些屬性將不會被解析和轉換,最終會被忽略。
MODIFY COLUMN
或CHANGE COLUMN
會忽略 FIRST | AFTER 關鍵字。
使用限制
由於 OceanBase 資料庫 MySQL 租戶本身的限制,如果存在以下情境,同步的 DDL 被成功轉換後,執行到 OceanBase 資料庫 MySQL 租戶可能會報錯。
通過
MODIFY COLUMN
或CHANGE COLUMN
修改欄位類型可能會失敗:OceanBase 資料庫 MySQL 租戶不支援修改為某些欄位類型。通過
MODIFY COLUMN
或CHANGE COLUMN
修改欄位長度可能會失敗。通過
ALTER COLUMN SET DEFAULT
設定預設值可能會失敗:OceanBase 資料庫 MySQL 租戶不支援某些函數/運算式。不支援刪除主鍵、唯一鍵、普通索引等相關的列,以及包含外鍵約束的列。