すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for OceanBase:インデックスまたは制約の作成

最終更新日:Jan 19, 2025

このトピックでは、MySQL データベースから OceanBase Database の 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

サポートされる操作

  • プライマリキーを作成する。

  • ユニークキーを作成する。

  • インデックスまたはキーを作成する。

  • 外部キーを作成する。

    フィールド、関数、または式に外部キーを作成する。 ON [DELETE | UPDATE] RESTRICT | CASCADE | NO ACTION | SET DEFAULT オプションを指定する。

  • フルテキストインデックスを作成する。

  • OceanBase Database V3.2.3 以降の MySQL テナントで CHECK 制約を作成する。

  • プレフィックス付きインデックスを作成する。

  • ASC または DESC キーワードを指定する。

サポートされない操作

重要

変換対象の ALTER TABLE DDL 文に以下のサポートされていない定義が含まれている場合、変換は失敗し、出力は空の文字列になります。

  • 関数キー部分を持つ以下のタイプのインデックスを作成する: 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)))));
  • 空間インデックスを作成する。

  • 外部キーに 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

  • 外部キーの MATCH FULL | MATCH PARTIAL | MATCH SIMPLE

制限事項

重要

MySQL テナントの OceanBase Database の制限により、以下のシナリオで同期された DDL 文が MySQL テナントの OceanBase Database で変換および実行されるときにエラーが返される場合があります。

  • MySQL テナントの OceanBase Database は、特定タイプのフィールドに以下のタイプの制約を作成できません: PRIMARY KEY、UNIQUE KEY、INDEX/KEY、FULLTEXT INDEX、および FOREIGN KEY。

  • MySQL テナントの OceanBase Database は、CHECK 制約で特定の関数または式を指定することをサポートしていません。

  • MySQL テナントの OceanBase Database は、FOREIGN KEY 制約で特定の関数または式を指定することをサポートしていません。