Tous les produits
Search
Centre de documentation

PolarDB:ALTER TABLE

Dernière mise à jour :Aug 27, 2026

Utilisez l'instruction ALTER TABLE pour modifier la structure d'une table existante. Par exemple, ajoutez des colonnes, créez des index ou modifiez les définitions de colonne.

Notes d'utilisation

  • Vous ne pouvez pas utiliser l'instruction ALTER TABLE pour modifier une clé de sharding.

  • Pour utiliser l'instruction ALTER sur une table contenant un index secondaire global (GSI), vous devez utiliser MySQL 5.7 ou une version ultérieure, ainsi que PolarDB-X 1.0 5.4.1 ou une version ultérieure.

Modifier une table standard

Remarque

Dans

PolarDB-X 1,0

, la syntaxe de modification d'une table standard est identique à la syntaxe native de MySQL. Pour plus d'informations, consultez la documentation MySQL relative à l'instruction

ALTER TABLE Statement

.

Syntaxe

ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name
    [alter_specification [, alter_specification] ...]
    [partition_options]

Example

  • Ajouter une colonne

    L'exemple suivant ajoute une colonne nommée idcard à la table user_log :

    ALTER TABLE user_log ADD COLUMN idcard varchar(30);
  • Créer un index local

    L'exemple suivant crée un index local nommé idcard_idx sur la colonne idcard de la table user_log :

    ALTER TABLE user_log ADD INDEX idcard_idx (idcard);
  • Renommer un index local

    L'exemple suivant renomme l'index idcard_idx en idcard_idx_new dans la table user_log :

    ALTER TABLE user_log RENAME INDEX `idcard_idx` TO `idcard_idx_new`;
  • Supprimer un index local

    L'exemple suivant supprime l'index idcard_idx de la table user_log :

    ALTER TABLE user_log DROP INDEX idcard_idx;
  • Modifier une colonne

    L'exemple suivant modifie la longueur de la colonne idcard (de type de données varchar) de 30 à 40 dans la table user_log :

    ALTER TABLE user_log MODIFY COLUMN idcard varchar(40);

Modifier une table avec un GSI

Column modifications

Lorsque vous modifiez une colonne dans une table contenant un GSI, la syntaxe est identique à celle d'une table standard, mais certaines limitations s'appliquent. Pour plus d'informations, consultez la section Considerations for using global secondary indexes.

  • Le tableau suivant résume la prise en charge des modifications de colonne avec l'instruction ALTER TABLE.

    Instruction Clé de sharding de la table principale Clé primaire (également la clé primaire de la table d'index) Colonne d'index unique local Clé de sharding du GSI Colonne d'index unique Colonne d'index Colonne de couverture
    ADD COLUMN N/A Non pris en charge N/A N/A N/A N/A N/A
    ALTER COLUMN SET DEFAULT et ALTER COLUMN DROP DEFAULT Non pris en charge Non pris en charge Pris en charge Non pris en charge Non pris en charge Non pris en charge Non pris en charge
    CHANGE COLUMN Non pris en charge Non pris en charge Pris en charge Non pris en charge Non pris en charge Non pris en charge Non pris en charge
    DROP COLUMN Non pris en charge Non pris en charge Pris en charge uniquement si la clé unique comporte une seule colonne. Non pris en charge Non pris en charge Non pris en charge Non pris en charge
    MODIFY COLUMN Non pris en charge Non pris en charge Pris en charge Non pris en charge Non pris en charge Non pris en charge Non pris en charge
  • Le tableau suivant résume la prise en charge des modifications d'index avec l'instruction ALTER TABLE.

    Instruction Prise en charge
    ALTER TABLE ADD PRIMARY KEY Pris en charge
    ALTER TABLE ADD [UNIQUE/FULLTEXT/SPATIAL/FOREIGN] KEY Pris en charge. Vous pouvez ajouter des index locaux sur la table principale et sur la table d'index. Le nom de l'index ne peut pas être identique à celui d'un GSI.
    ALTER TABLE ALTER INDEX index_name {VISIBLE INVISIBLE}

    Interdit

    ALTER TABLE {DISABLE ENABLE} KEYS

    Pris en charge. Cette instruction s'exécute uniquement sur la table principale. La modification de l'état du GSI est interdite.

    ALTER TABLE DROP PRIMARY KEY Interdit
    ALTER TABLE DROP INDEX Pris en charge uniquement pour la suppression d'un index local ou d'un index secondaire global.
    ALTER TABLE RENAME INDEX Interdit

Modifications d'index

Syntaxe

ALTER TABLE tbl_name
    alter_specification # Only one alter_specification is supported for GSI modifications.

alter_specification:
  | ADD GLOBAL {INDEX|KEY} index_name # You must explicitly specify the index name for a GSI.
      [index_type] (index_sharding_col_name,...)
      global_secondary_index_option
      [index_option] ...
  | ADD [CONSTRAINT [symbol]] UNIQUE GLOBAL
      [INDEX|KEY] index_name # You must explicitly specify the index name for a 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 # Must contain only the columns specified in index_sharding_col_name.

# Specify the sharding method for the index table.
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) 

# The following is MySQL DDL syntax.
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}

Utilisez l'instruction ALTER TABLE ADD GLOBAL INDEX pour ajouter un GSI à une table existante. Cette instruction ajoute le mot-clé GLOBAL à la syntaxe MySQL standard pour spécifier que le nouvel index est un GSI.

Vous pouvez également utiliser l'instruction

ALTER TABLE { DROP | RENAME } INDEX

pour modifier un GSI. Toutefois, certaines limitations s'appliquent lors de la création d'un GSI après la création d'une table.

Pour plus de détails sur les limitations et les conventions relatives aux GSI, consultez la section

Considerations for using global secondary indexes

.

Pour plus d'informations sur les clauses utilisées pour définir un index secondaire global, consultez la section CREATE TABLE.

Exemple

L'exemple suivant montre comment créer un index secondaire global unique après la création d'une table.

  • Créer un GSI

    # Create a table.
    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`);
    # Create a global secondary index (GSI).
    ALTER TABLE t_order ADD UNIQUE GLOBAL INDEX `g_i_buyer` (`buyer_id`) COVERING (`order_snapshot`) dbpartition by hash(`buyer_id`);
    • Table principale : la table t_order utilise le sharding de base de données mais pas le sharding de table. Les données sont réparties entre les bases de données en fonction d'un hachage de la colonne order_id.

    • Table d'index : la table g_i_buyer utilise le sharding de base de données mais pas le sharding de table. Les données sont réparties entre les bases de données en fonction d'un hachage de la colonne buyer_id. La colonne order_snapshot est spécifiée comme colonne de couverture.

    • Clause de définition d'index : GLOBAL INDEX .

  • Exécutez l'instruction SHOW INDEX pour afficher les informations sur les index. Le résultat inclut l'index local sur la clé de sharding order_id et le GSI, qui couvre les colonnes buyer_id, id, order_id et order_snapshot. Dans ce GSI, buyer_id est la clé de sharding de la table d'index. Les colonnes id (clé primaire de la table principale) et order_id (clé de sharding de la table principale) sont incluses en tant que colonnes de couverture par défaut, et order_snapshot est la colonne de couverture spécifiée explicitement.

    mysql> show index from t_order;
    +---------+------------+-----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
    | 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 |               |
    +---------+------------+-----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
  • Exécutez l'instruction SHOW GLOBAL INDEX pour afficher les informations spécifiques au GSI. Pour plus d'informations, consultez la section SHOW GLOBAL INDEX.

    mysql> show global index from t_order;
    +---------------------+---------+------------+-----------+-------------+------------------------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+
    | 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 |
    +---------------------+---------+------------+-----------+-------------+------------------------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+
  • Affichez la structure de la table d'index. La table d'index contient la clé primaire, les colonnes de clé de sharding, les colonnes de couverture par défaut et les colonnes de couverture spécifiées explicitement de la table principale. L'attribut AUTO_INCREMENT est supprimé de la colonne de clé primaire, et les index locaux de la table principale sont exclus. Pour un GSI unique, un index unique est créé par défaut sur toutes ses colonnes de clé de sharding afin d'appliquer la contrainte d'unicité globale.

    mysql> show create table g_i_buyer;
    +-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | 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`) |
    +-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  • Supprimer un GSI

    Supprimez le GSI nommé g_i_buyer. La table d'index correspondante est également supprimée.

    ALTER TABLE `t_order` DROP INDEX `g_i_buyer`;
  • Renommer un index

    Par défaut, le renommage d'un GSI est interdit.