Gunakan pernyataan ALTER TABLE untuk mengubah struktur tabel, seperti menambahkan kolom, indeks, atau memodifikasi definisi data. Pernyataan ini hanya berlaku untuk database dalam mode DRDS.
Catatan penggunaan
Anda tidak dapat menggunakan pernyataan ALTER TABLE untuk memodifikasi kunci shard.
Sintaks
Untuk sintaks lengkap, lihat pernyataan ALTER TABLE MySQL.
ALTER TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]
Example
-
Tambahkan kolom
Tambahkan kolom
idcardke tabeluser_log:ALTER TABLE user_log ADD COLUMN idcard varchar(30); -
Tambahkan indeks lokal
Tambahkan indeks bernama
idcard_idxpada kolomidcarddi tabeluser_log:ALTER TABLE user_log ADD INDEX idcard_idx (idcard); -
Ubah nama indeks lokal
Ubah nama indeks
idcard_idxdi tabeluser_logmenjadiidcard_idx_new:ALTER TABLE user_log RENAME INDEX `idcard_idx` TO `idcard_idx_new`; -
Hapus indeks lokal
Hapus indeks
idcard_idxdari tabeluser_log:ALTER TABLE user_log DROP INDEX idcard_idx; -
Modifikasi kolom
Ubah panjang kolom
idcard(varchar) di tabeluser_logdari 30 menjadi 40:ALTER TABLE user_log MODIFY COLUMN idcard varchar(40);
Global secondary indexes
PolarDB-X mendukung global secondary indexes (GSIs). Untuk informasi lebih lanjut tentang prinsip dasarnya, lihat Global secondary indexes.
Modifikasi kolom
Untuk tabel yang menggunakan GSIs, sintaks modifikasi kolom sama dengan tabel biasa.
Ketika Anda memodifikasi tabel yang berisi global secondary index, modifikasi kolom memiliki batasan tambahan. Untuk informasi lebih lanjut tentang batasan dan konvensi GSIs, lihat Buat dan gunakan global secondary indexes.
Index modifications
Sintaks
ALTER TABLE tbl_name
alter_specification # Untuk perubahan terkait GSI, hanya satu alter_specification yang didukung.
alter_specification:
| ADD GLOBAL {INDEX|KEY} index_name # Anda harus secara eksplisit menentukan nama GSI.
[index_type] (index_sharding_col_name,...)
global_secondary_index_option
[index_option] ...
| ADD [CONSTRAINT [symbol]] UNIQUE GLOBAL
[INDEX|KEY] index_name # Anda harus secara eksplisit menentukan nama GSI.
[index_type] (index_sharding_col_name,...)
global_secondary_index_option
[index_option] ...
| DROP {INDEX|KEY} index_name
| RENAME {INDEX|KEY} old_index_name TO new_index_name
global_secondary_index_option:
[COVERING (col_name,...)] # Covering Index
drds_partition_options # Hanya boleh berisi kolom yang ditentukan dalam index_sharding_col_name.
# Tentukan metode sharding untuk tabel indeks.
drds_partition_options:
DBPARTITION BY db_sharding_algorithm
[TBPARTITION BY {table_sharding_algorithm} [TBPARTITIONS num]]
db_sharding_algorithm:
HASH([col_name])
| {YYYYMM|YYYYWEEK|YYYYDD|YYYYMM_OPT|YYYYWEEK_OPT|YYYYDD_OPT}(col_name)
| UNI_HASH(col_name)
| RIGHT_SHIFT(col_name, n)
| RANGE_HASH(col_name, col_name, n)
table_sharding_algorithm:
HASH(col_name)
| {MM|DD|WEEK|MMDD|YYYYMM|YYYYWEEK|YYYYDD|YYYYMM_OPT|YYYYWEEK_OPT|YYYYDD_OPT}(col_name)
| UNI_HASH(col_name)
| RIGHT_SHIFT(col_name, n)
| RANGE_HASH(col_name, col_name, n)
# Sintaks DDL MySQL
index_sharding_col_name:
col_name [(length)] [ASC | DESC]
index_option:
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT 'string'
index_type:
USING {BTREE | HASH}
Pernyataan ALTER TABLE ADD GLOBAL INDEX menambahkan GSI ke tabel yang sudah ada. Pernyataan ini memperluas sintaks MySQL dengan memperkenalkan kata kunci GLOBAL untuk menentukan bahwa indeks yang ditambahkan adalah GSI.
Sintaks ALTER TABLE { DROP | RENAME } INDEX juga dapat memodifikasi GSI. Operasi ini memiliki batasan tertentu. Untuk informasi lebih lanjut tentang batasan dan konvensi GSIs, lihat Buat dan gunakan global secondary indexes.
Untuk deskripsi lengkap klausa definisi GSI, lihat CREATE TABLE (mode DRDS).
Contoh
-
Buat global secondary index
Contoh ini membuat GSI unik pada tabel yang sudah ada.
# Buat tabel CREATE TABLE t_order ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `order_id` varchar(20) DEFAULT NULL, `buyer_id` varchar(20) DEFAULT NULL, `seller_id` varchar(20) DEFAULT NULL, `order_snapshot` longtext DEFAULT NULL, `order_detail` longtext DEFAULT NULL, PRIMARY KEY (`id`), KEY `l_i_order` (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`order_id`); # Buat global secondary index ALTER TABLE t_order ADD UNIQUE GLOBAL INDEX `g_i_buyer` (`buyer_id`) COVERING (`order_snapshot`) dbpartition by hash(`buyer_id`);-
tabel dasar:
t_orderdi-shard hanya berdasarkan database (bukan berdasarkan tabel). Metode sharding database adalah hash pada kolomorder_id. -
tabel indeks:
g_i_buyerdi-shard hanya berdasarkan database (bukan berdasarkan tabel). Metode sharding database adalah hash pada kolombuyer_id, dan kolom covering-nya adalahorder_snapshot. -
klausa definisi indeks:
GLOBAL INDEX `g_i_buyer` ON t_order (`buyer_id`) COVERING (`order_snapshot`) dbpartition by hash(`buyer_id`).
Gunakan SHOW INDEX untuk melihat informasi indeks. Hasilnya mencakup indeks lokal pada kunci shard
order_iddan GSI, yang diindeks berdasarkanbuyer_idserta mencakup beberapa kolom covering. Dalam contoh ini,buyer_idadalah kunci shard dari tabel indeks.iddanorder_idadalah kolom covering bawaan (kunci primer dan kunci shard dari tabel dasar).order_snapshotadalah kolom covering yang ditentukan secara eksplisit.CatatanUntuk detail tentang batasan dan konvensi GSI, lihat Buat dan gunakan global secondary indexes. Untuk detail tentang SHOW INDEX, lihat SHOW INDEX.
show index from t_order;Output berikut dikembalikan:
+---------+------------+-----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+----------+---------------+ | TABLE | NON_UNIQUE | KEY_NAME | SEQ_IN_INDEX | COLUMN_NAME | COLLATION | CARDINALITY | SUB_PART | PACKED | NULL | INDEX_TYPE | COMMENT | INDEX_COMMENT | +---------+------------+-----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+----------+---------------+ | t_order | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | | t_order | 1 | l_i_order | 1 | order_id | A | 0 | NULL | NULL | YES | BTREE | | | | t_order | 0 | g_i_buyer | 1 | buyer_id | NULL | 0 | NULL | NULL | YES | GLOBAL | INDEX | | | t_order | 1 | g_i_buyer | 2 | id | NULL | 0 | NULL | NULL | | GLOBAL | COVERING | | | t_order | 1 | g_i_buyer | 3 | order_id | NULL | 0 | NULL | NULL | YES | GLOBAL | COVERING | | | t_order | 1 | g_i_buyer | 4 | order_snapshot | NULL | 0 | NULL | NULL | YES | GLOBAL | COVERING | | +---------+------------+-----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+----------+---------------+Anda dapat menggunakan
SHOW GLOBAL INDEXuntuk melihat hanya informasi GSI. Untuk informasi lebih lanjut, lihat SHOW GLOBAL INDEX.show global index from t_order;Output berikut dikembalikan:
+---------------------+---------+------------+-----------+-------------+------------------------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+ | SCHEMA | TABLE | NON_UNIQUE | KEY_NAME | INDEX_NAMES | COVERING_NAMES | INDEX_TYPE | DB_PARTITION_KEY | DB_PARTITION_POLICY | DB_PARTITION_COUNT | TB_PARTITION_KEY | TB_PARTITION_POLICY | TB_PARTITION_COUNT | STATUS | +---------------------+---------+------------+-----------+-------------+------------------------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+ | ZZY3_DRDS_LOCAL_APP | t_order | 0 | g_i_buyer | buyer_id | id, order_id, order_snapshot | NULL | buyer_id | HASH | 4 | | NULL | NULL | PUBLIC | +---------------------+---------+------------+-----------+-------------+------------------------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+Lihat struktur tabel indeks. Tabel indeks mencakup kunci primer dan kunci shard dari tabel dasar, bersama dengan kolom covering bawaan maupun kustom. Atribut
AUTO_INCREMENTdihapus dari kolom kunci primer, dan indeks lokal dari tabel dasar tidak disertakan. Indeks unik dibuat secara bawaan pada kunci shard tabel indeks untuk menerapkan kendala unik global.show create table g_i_buyer;Output berikut dikembalikan:
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | g_i_buyer | CREATE TABLE `g_i_buyer` (`id` bigint(11) NOT NULL, `order_id` varchar(20) DEFAULT NULL, `buyer_id` varchar(20) DEFAULT NULL, `order_snapshot` longtext, PRIMARY KEY (`id`), UNIQUE KEY `auto_shard_key_buyer_id` (`buyer_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`buyer_id`) | +-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -
-
Hapus global secondary index
Hapus GSI bernama
g_i_seller. Tabel indeks yang sesuai juga akan dihapus.# Hapus indeks ALTER TABLE `t_order` DROP INDEX `g_i_seller`; -
Ubah nama indeks
Secara default, pengubahan nama GSI dibatasi. Untuk detail tentang batasan dan konvensi GSI, lihat Buat dan gunakan global secondary indexes.