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