全部產品
Search
文件中心

ApsaraDB for OceanBase:建立索引或約束

更新時間:Jul 01, 2024

本文為您介紹遷移 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 約束中的某些函數/運算式。