Gunakan pernyataan ALTER TABLE untuk memodifikasi skema tabel, seperti menambahkan kolom, membuat indeks, atau mengubah tipe data dan atribut lain dari kolom. Sintaks yang dijelaskan hanya berlaku untuk database dalam mode Distributed Relational Database Service (DRDS).
Catatan penggunaan
Pernyataan ALTER TABLE tidak dapat digunakan untuk mengubah kunci shard dari sebuah tabel.
Sintaks
Pernyataan ALTER TABLE dapat digunakan untuk menambahkan kolom, membuat indeks, atau mengubah tipe data dan atribut lain dari kolom. Untuk informasi lebih lanjut tentang sintaks, lihat Pernyataan MySQL ALTER TABLE.
ALTER TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]Examples
Tambahkan Kolom
Jalankan pernyataan berikut untuk menambahkan kolom bernama idcard ke tabel user_log:
ALTER TABLE user_log ADD COLUMN idcard varchar(30);Buat Indeks Lokal
Jalankan pernyataan berikut untuk membuat indeks bernama idcard_idx pada kolom idcard di tabel user_log:
ALTER TABLE user_log ADD INDEX idcard_idx (idcard);Ganti Nama Indeks Lokal
Jalankan pernyataan berikut untuk mengganti nama indeks idcard_idx menjadi idcard_idx_new di tabel user_log:
ALTER TABLE user_log RENAME INDEX `idcard_idx` TO `idcard_idx_new`;Hapus Indeks Lokal
Jalankan pernyataan berikut untuk menghapus indeks idcard_idx dari tabel user_log:
ALTER TABLE user_log DROP INDEX idcard_idx;Modifikasi Kolom
Jalankan pernyataan berikut untuk mengubah panjang maksimum kolom idcard dengan tipe data VARCHAR di tabel user_log dari 30 karakter menjadi 40 karakter:
ALTER TABLE user_log MODIFY COLUMN idcard varchar(40);
Indeks Sekunder Global (GSIs)
PolarDB-X mendukung indeks sekunder global (GSIs). Untuk informasi lebih lanjut tentang GSIs, lihat GSI.
Modify a column
Untuk tabel dengan GSIs, sintaks untuk memodifikasi kolom sama dengan sintaks untuk tabel tanpa GSIs.
Ketika memodifikasi kolom pada tabel dengan GSIs, perhatikan batasan-batasannya. Untuk informasi lebih lanjut tentang batasan dan konvensi GSIs, lihat Cara menggunakan indeks sekunder global.
Modify an index
Sintaks
ALTER TABLE tbl_name
alter_specification # Saat Anda menggunakan pernyataan ALTER TABLE untuk memodifikasi indeks sekunder global, Anda hanya dapat menggunakan opsi alter_specification satu kali.
alter_specification:
| ADD GLOBAL {INDEX|KEY} index_name # Untuk menambahkan GSI, 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 # Untuk menambahkan GSI, 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 # Tentukan satu atau lebih kolom yang terdaftar di index_sharding_col_name.
# Tentukan metode sharding.
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}Sintaks ALTER TABLE ADD GLOBAL INDEX digunakan untuk menambahkan GSI ke tabel yang sudah ada. Sintaks ini memperkenalkan kata kunci GLOBAL ke dalam sintaks MySQL untuk menentukan bahwa indeks yang ditambahkan adalah GSI.
Gunakan sintaks ALTER TABLE { DROP | RENAME } INDEX untuk menghapus atau mengganti nama GSI. Saat menambahkan GSI ke tabel yang sudah ada, perhatikan batasan-batasannya. Untuk informasi lebih lanjut tentang batasan dan konvensi GSIs, lihat Cara menggunakan indeks sekunder global.
Untuk informasi tentang klausa yang dapat digunakan untuk membuat GSIs, lihat CREATE TABLE (mode DRDS).
Contoh
Create a GSI on an existing table
Contoh berikut menunjukkan cara membuat GSI 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 GSI. ALTER TABLE t_order ADD UNIQUE GLOBAL INDEX `g_i_buyer` (`buyer_id`) COVERING (`order_snapshot`) dbpartition by hash(`buyer_id`);t_order adalah tabel dasar. Tabel dasar didistribusikan ke beberapa shard database berdasarkan nilai hash dari kolom order_id.
g_i_buyer adalah tabel indeks. Tabel indeks didistribusikan ke beberapa shard database berdasarkan nilai hash dari kolom buyer_id. Kolom order_snapshot ditentukan sebagai kolom penutup.
Klausa
GLOBAL INDEX `g_i_seller` ON t_order (`seller_id`) dbpartition by hash(`seller_id`)mendefinisikan GSI.
Gunakan pernyataan
SHOW INDEXuntuk menanyakan indeks pada tabel. Dalam contoh ini, indeks pada tabel t_order mencakup indeks lokal pada kolom kunci shard order_id dan GSI pada kolom buyer_id, id, order_id, dan order_snapshot. buyer_id adalah kunci shard dari tabel indeks, id (kunci utama) dan order_id (kunci shard dari tabel indeks) adalah kolom penutup default, dan order_snapshot adalah kolom penutup yang ditentukan secara eksplisit.CatatanUntuk informasi tentang batasan dan konvensi GSIs, lihat Cara menggunakan indeks sekunder global. Untuk informasi tentang pernyataan SHOW INDEX, lihat SHOW INDEX.
show index from t_order;Informasi 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 | | +---------+------------+-----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+----------+---------------+Gunakan pernyataan
SHOW GLOBAL INDEXuntuk menanyakan informasi tentang GSIs. Untuk informasi lebih lanjut, lihat SHOW GLOBAL INDEX.show global index from t_order;Informasi 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 | +---------------------+---------+------------+-----------+-------------+------------------------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+Gunakan pernyataan berikut untuk menanyakan skema tabel indeks. Dalam contoh berikut, tabel indeks g_i_buyer berisi kunci utama dari tabel dasar, kunci shard database dan tabel, kolom penutup default, dan kolom penutup kustom. Kunci utama dalam tabel indeks tidak memiliki atribut AUTO_INCREMENT, dan indeks lokal pada tabel dasar dihapus. Indeks unik global dibuat pada semua kunci shard untuk memastikan kendala unik global.
show create table g_i_buyer;Informasi 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`) | +-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+Delete a GSI
Hapus GSI bernama g_i_seller. Tabel indeks yang sesuai juga akan dihapus.
# Hapus GSI bernama g_i_seller. ALTER TABLE `t_order` DROP INDEX `g_i_seller`;Rename a GSI
Secara default, GSI tidak dapat diganti namanya. Untuk informasi tentang batasan dan konvensi GSIs, lihat Cara menggunakan indeks sekunder global.