All Products
Search
Document Center

PolarDB:ALTER TABLE (mode DRDS)

Last Updated:Aug 28, 2026

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

Catatan

Untuk sintaks lengkap, lihat pernyataan ALTER TABLE MySQL.

ALTER TABLE tbl_name
    [alter_specification [, alter_specification] ...]
    [partition_options]

Example

  • Tambahkan kolom

    Tambahkan kolom idcard ke tabel user_log:

    ALTER TABLE user_log
        ADD COLUMN idcard varchar(30);
  • Tambahkan indeks lokal

    Tambahkan indeks bernama idcard_idx pada kolom idcard di tabel user_log:

    ALTER TABLE user_log
        ADD INDEX idcard_idx (idcard);
  • Ubah nama indeks lokal

    Ubah nama indeks idcard_idx di tabel user_log menjadi idcard_idx_new:

    ALTER TABLE user_log
        RENAME INDEX `idcard_idx` TO `idcard_idx_new`;
  • Hapus indeks lokal

    Hapus indeks idcard_idx dari tabel user_log:

    ALTER TABLE user_log
        DROP INDEX idcard_idx;
  • Modifikasi kolom

    Ubah panjang kolom idcard (varchar) di tabel user_log dari 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.

Catatan

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_order di-shard hanya berdasarkan database (bukan berdasarkan tabel). Metode sharding database adalah hash pada kolom order_id.

    • tabel indeks: g_i_buyer di-shard hanya berdasarkan database (bukan berdasarkan tabel). Metode sharding database adalah hash pada kolom buyer_id, dan kolom covering-nya adalah order_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_id dan GSI, yang diindeks berdasarkan buyer_id serta mencakup beberapa kolom covering. Dalam contoh ini, buyer_id adalah kunci shard dari tabel indeks. id dan order_id adalah kolom covering bawaan (kunci primer dan kunci shard dari tabel dasar). order_snapshot adalah kolom covering yang ditentukan secara eksplisit.

    Catatan

    Untuk 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 INDEX untuk 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_INCREMENT dihapus 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.