全部產品
Search
文件中心

ApsaraDB for OceanBase:約束和索引操作

更新時間:Jul 01, 2024

本文為您介紹遷移 MySQL 資料庫的資料至 OceanBase 資料庫 MySQL 租戶時,ALTER TABLE DDL 有關約束/索引操作同步支援的範圍。

總覽

alter_option: {
   ADD {INDEX | KEY} [index_name]
        [index_type] (key_part,...) [index_option] ...
  | ADD {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name]
        (key_part,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]] PRIMARY KEY
        [index_type] (key_part,...)
        [index_option] ...
  | ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY]
        [index_name] [index_type] (key_part,...)
        [index_option] ...
  | ADD [CONSTRAINT [symbol]] FOREIGN KEY
        [index_name] (col_name,...)
        reference_definition
  | ADD [CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
  | DROP {CHECK | CONSTRAINT} symbol
  | ALTER {CHECK | CONSTRAINT} symbol [NOT] ENFORCED
  | ALTER INDEX index_name {VISIBLE | INVISIBLE}
  | {DISABLE | ENABLE} KEYS
  | DROP {INDEX | KEY} index_name
  | DROP PRIMARY KEY
  | DROP FOREIGN KEY fk_symbol
  | RENAME {INDEX | KEY} old_index_name TO new_index_name
}

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}
}

支援的範圍

  • 支援建立普通索引:ADD INDEX / KEY

  • 支援刪除索引:DROP INDEX

  • 支援建立全文索引:ADD FULLTEXT INDEX / KEY

  • 支援建立唯一索引:ADD UNIQUE INDEX / KEY

  • 支援建立外鍵 ADD:FOREIGN KEY

  • 支援刪除主鍵約束: DROP PRIMARY KEY

    重要

    僅 OceanBase 資料庫 4.0.0 及以上版本支援。

不支援的範圍

重要

如果同步的 DDL 包含以下不支援的定義,則整個建表語句會轉換失敗(輸出空)。

  • UNIQUE KEY、INDEX / KEY、FULLTEXT INDEX 不支援函數索引,僅支援索引建立在欄位上。

  • 不支援 ADD SPATIAL INDEX

  • 不支援 ADD PRIMARY KEY

  • 不支援 ALTER TABLE DISABLE | ENABLE KEYS

  • 不支援 FOREIGN KEY 指定 ON [DELETE | UPDATE] SET NULL 屬性。

  • OceanBase 資料庫 MySQL 租戶 3.2.3 以下版本,不支援下述操作:

    • 不支援 ADD CHECK

    • 不支援 DROP CHECK

    • 不支援 ALTER CHECK [NOT] ENFORCED

    • 不支援 ALTER INDEX VISIBLE | INVISIBLE

    • 不支援 RENAME INDEX / KEY

      ALTER TABLE t rename KEY k TO kk;
      ALTER TABLE T RENAME INDEX b TO w;

忽略的屬性

重要

如果同步的 DDL 包含以下不支援的定義,則這些屬性將不會被解析和轉換,最終會被忽略。

  • 指定 USING BTREEUSING HASH

  • index option 中指定 KEY_BLOCK_SIZEindex_typeWITH PARSERCOMMENTVISIBLE | INVISIBLEENGINE_ATTRIBUTESECONDARY_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 約束中的某些函數/運算式。