本文為您介紹遷移 MySQL 資料庫的資料至 OceanBase 資料庫 MySQL 租戶時,CREATE TABLE DDL 建立索引或約束支援的轉換範圍。
索引或約束定義
create_definition: {
col_name column_definition
| {INDEX | KEY} [index_name] [index_type] (key_part,...)
[index_option] ...
| {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name] (key_part,...)
[index_option] ...
| [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (key_part,...)
[index_option] ...
| [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY]
[index_name] [index_type] (key_part,...)
[index_option] ...
| [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (col_name,...)
reference_definition
| check_constraint_definition
}
key_part: {col_name [(length)] | (expr)} [ASC | DESC]
index_type:
USING {BTREE | HASH}
index_option: {
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT 'string'
| {VISIBLE | INVISIBLE}
|ENGINE_ATTRIBUTE [=] 'string'
|SECONDARY_ENGINE_ATTRIBUTE [=] 'string'
}
check_constraint_definition:
[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
reference_definition:
REFERENCES tbl_name (key_part,...)
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
支援的範圍
支援建立 PRIMARY KEY。
支援建立 UNIQUE KEY。
支援建立 INDEX / KEY。
支援建立 FOREIGN KEY。
支援 FOREIGN KEY 建立在欄位/函數/運算式上,支援指定 ON [DELETE | UPDATE] RESTRICT | CASCADE | NO ACTION | SET DEFAULT 屬性。
支援建立 FULLTEXT INDEX。
OceanBase 資料庫 MySQL 租戶 3.2.3 及以上版本支援建立 CHECK 條件約束。
支援首碼索引。
支援指定 ASC / DESC。
不支援的範圍
如果同步的 DDL 包含以下不支援的定義,則整個建表語句會轉換失敗(輸出空)。
PRIMARY KEY、UNIQUE KEY、INDEX / KEY、FULLTEXT INDEX 不支援函數索引,僅支援索引建立在欄位上。
不支援 PRIMARY KEY、UNIQUE KEY、INDEX / KEY、FULLTEXT INDEX 定義中包含函數或運算式,樣本如下:
CREATE TABLE functional_index_t1 (col1 INT, PRIMARY KEY (col1, (ABS(col1)))); CREATE TABLE functional_index_t1(x VARCHAR(30), INDEX idx ((CAST(x->>'$.name' AS CHAR(30)))));
不支援建立 SPATIAL INDEX。
不支援 FOREIGN KEY 指定 ON [DELETE | UPDATE] SET NULL 屬性。
忽略的屬性
如果同步的 DDL 中包含以下屬性的定義,則這些屬性將不會被解析和轉換,最終會被忽略。
指定 USING BTREE 或 USING HASH。
index option 中指定 KEY_BLOCK_SIZE、index_type、WITH PARSER、COMMENT、VISIBLE | INVISIBLE、ENGINE_ATTRIBUTE 和 SECONDARY_ENGINE_ATTRIBUTE 屬性。
CHECK 條件約束中指定 [NOT] ENFORCED 屬性。
FOREIGN KEY 指定 MATCH FULL | MATCH PARTIAL | MATCH SIMPLE 屬性。
使用限制
由於 OceanBase 資料庫 MySQL 租戶本身的限制,如果存在以下情境,同步的 DDL 被成功轉換後,執行到 OceanBase 資料庫 MySQL 租戶可能會報錯。
OceanBase 資料庫 MySQL 租戶不支援 PRIMARY KEY、UNIQUE KEY、INDEX / KEY、FULLTEXT INDEX 和 FOREIGN KEY 建立在某些類型的欄位上。
OceanBase 資料庫 MySQL 租戶不支援 CHECK 條件約束中的某些函數/運算式。
OceanBase 資料庫 MySQL 租戶不支援 FOREIGN KEY 約束中的某些函數/運算式。