All Products
Search
Document Center

ApsaraDB for OceanBase (Deprecated):Buat indeks atau kendala

Last Updated:Jun 28, 2025

Topik ini menjelaskan ruang lingkup konversi yang didukung dari operasi DDL CREATE TABLE untuk membuat indeks atau kendala selama migrasi data dari database MySQL ke tenant MySQL di OceanBase Database.

Sintaksis

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

Operasi yang Didukung

  • Buat kunci utama.

  • Buat kunci unik.

  • Buat indeks atau kunci.

  • Buat kunci asing.

    Buat kunci asing pada bidang, fungsi, atau ekspresi. Tentukan opsi ON [DELETE | UPDATE] RESTRICT | CASCADE | NO ACTION | SET DEFAULT.

  • Buat indeks teks penuh.

  • Buat kendala CHECK di tenant MySQL OceanBase Database versi 3.2.3 dan yang lebih baru.

  • Buat indeks berawalan.

  • Tentukan kata kunci ASC atau DESC.

Operasi yang Tidak Didukung

Penting

Jika pernyataan DDL ALTER TABLE yang akan dikonversi berisi definisi berikut yang tidak didukung, konversi akan gagal dan keluarannya adalah string kosong.

  • Buat jenis indeks berikut dengan bagian kunci fungsional: PRIMARY KEY, UNIQUE KEY, INDEX/KEY, dan FULLTEXT INDEX. (Anda hanya dapat membuat indeks ini pada bidang.)

    Definisi kunci utama, kunci unik, indeks, kunci, atau indeks teks penuh yang berisi fungsi atau ekspresi. Contoh:

    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)))));
  • Buat indeks spasial.

  • Tentukan opsi ON [DELETE | UPDATE] SET NULL untuk kunci asing.

Klausa dan Opsi yang Diabaikan

Catatan

Klausa dan opsi berikut akan diabaikan dan tidak akan diselesaikan atau dikonversi ketika ditentukan dalam pernyataan DDL yang disinkronkan.

  • USING BTREE atau USING HASH

  • KEY_BLOCK_SIZE, index_type, WITH PARSER, COMMENT, VISIBLE | INVISIBLE, ENGINE_ATTRIBUTE, atau SECONDARY_ENGINE_ATTRIBUTE di index_option

  • [NOT] ENFORCED untuk kendala CHECK

  • MATCH FULL | MATCH PARTIAL | MATCH SIMPLE untuk kunci asing

Batasan

Penting

Karena batasan tenant MySQL di OceanBase Database, kesalahan mungkin terjadi ketika pernyataan DDL yang disinkronkan dikonversi dan dieksekusi di tenant MySQL OceanBase Database dalam skenario berikut:

  • Tenant MySQL OceanBase Database tidak dapat membuat jenis kendala berikut pada jenis bidang tertentu: PRIMARY KEY, UNIQUE KEY, INDEX/KEY, FULLTEXT INDEX, dan FOREIGN KEY.

  • Tenant MySQL OceanBase Database tidak mendukung menentukan fungsi atau ekspresi tertentu dalam kendala CHECK.

  • Tenant MySQL OceanBase Database tidak mendukung menentukan fungsi atau ekspresi tertentu dalam kendala FOREIGN KEY.