Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Modify column types in seconds

Dernière mise à jour :Aug 08, 2026

AliSQL étend MySQL 8.0 communautaire pour prendre en charge la modification instantanée des types de colonnes. Au lieu de copier l'intégralité des données de la table, cette opération modifie uniquement les métadonnées et s'exécute en quelques secondes, quelle que soit la taille de la table.

MySQL 8.0 communautaire utilise le mécanisme INSTANT DDL pour ajouter et supprimer des colonnes, évitant ainsi la copie des données. Toutefois, pour modifier les types de colonnes, il recourt au mécanisme COPY DDL, qui réécrit la table entière. AliSQL étend le framework INSTANT DDL aux changements de type de colonne en appliquant la même approche basée exclusivement sur les métadonnées.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Une instance ApsaraDB RDS for MySQL exécutant MySQL 8.0 avec une version mineure du moteur 20251031 ou ultérieure

Si votre instance ne répond pas à cette exigence, effectuez d'abord une mise à niveau :

Limites

Contrainte Détails
Moteur de stockage InnoDB uniquement
Colonnes indexées La modification des colonnes indexées n'est pas prise en charge
Colonnes de clé de partitionnement La modification des colonnes incluses dans une clé de partitionnement n'est pas prise en charge
Modifications d'entiers prises en charge Élargissement uniquement : TINYINT → SMALLINT → MEDIUMINT → INT → BIGINT. Par exemple, la conversion de INT vers BIGINT est prise en charge, tandis que celle de BIGINT vers INT ne l'est pas
Modifications de chaînes prises en charge Augmentation de la longueur des colonnes CHAR et VARCHAR uniquement. Pour passer de CHAR(M) à CHAR(N), N doit être supérieur à M

Paramètres

Trois paramètres contrôlent cette fonctionnalité. Ils doivent tous être définis sur ON pour activer la modification instantanée du type de colonne.

Paramètre Description Portée Valeur par défaut
loose_rds_upgrade_datatype_instant_enable Active la modification instantanée du type de colonne Globale OFF
loose_rds_upgrade_datatype_online_enable Active la modification en ligne du type de colonne Globale OFF
loose_innodb_instant_ddl_enabled Interrupteur principal pour INSTANT DDL Globale ON

Ces trois paramètres sont booléens, acceptent les valeurs ON ou OFF, et ne nécessitent pas de redémarrage de l'instance.

Activer les paramètres

  1. Accédez à la page Instances. Dans la barre de navigation supérieure, sélectionnez la région où se trouve votre instance RDS. Localisez l'instance et cliquez sur son ID.

  2. Dans le volet de navigation de gauche, cliquez sur Parameter Settings.

  3. Sous l'onglet Modifiable Parameters, recherchez chaque paramètre et définissez sa valeur sur ON.

  4. Cliquez sur OK, puis sur Submit Parameters. Dans la fenêtre qui s'affiche, sélectionnez une plage horaire pour l'application des modifications.

Modifier instantanément les types de colonnes

Les exemples ci-dessous utilisent la table suivante :

CREATE TABLE `t1` (
  `id` int NOT NULL,
  `c1` char(10) DEFAULT NULL,
  `c2` varchar(10) DEFAULT NULL,
  `c3` char(100) DEFAULT NULL,
  `c4` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Tous les exemples utilisent ALGORITHM=INSTANT pour exécuter la modification en tant qu'opération portant uniquement sur les métadonnées.

Modifier un type de colonne

Modifiez c1 de char(10) vers bigint :

ALTER TABLE `t1` MODIFY `c1` bigint DEFAULT NULL, ALGORITHM=INSTANT;

Étendre la longueur d'une chaîne

Étendez la longueur de c2 (VARCHAR) et c3 (CHAR) :

ALTER TABLE `t1` MODIFY `c2` char(20) DEFAULT NULL, ALGORITHM=INSTANT;
ALTER TABLE `t1` MODIFY `c3` varchar(100) DEFAULT NULL, ALGORITHM=INSTANT;

Laisser le système choisir l'algorithme

Omettez ALGORITHM= : le système sélectionnera automatiquement l'algorithme le plus approprié pour modifier le type de colonne.

ALTER TABLE `t1` MODIFY `c1` bigint DEFAULT NULL;
Remarque

La spécification de ALGORITHM=INPLACE exécute la modification en ligne (méthode in-place), et non de manière instantanée.

Vérifier la modification

Pour confirmer qu'une colonne a été modifiée instantanément, interrogez la vue INFORMATION_SCHEMA.INNODB_COLUMNS. Les colonnes modifiées instantanément affichent une valeur PARENT_PHYSICAL_POSITION différente de -1 ; les colonnes normales affichent -1.

Étape 1 : Obtenez l'ID de la table depuis la vue INFORMATION_SCHEMA.INNODB_TABLES :

SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = 'demo/t1';

Exemple de sortie :

+----------+---------+------+--------+-------+------------+---------------+------------+--------------+--------------------+-----------------------+-----------------------+---------------------+
| TABLE_ID | NAME    | FLAG | N_COLS | SPACE | ROW_FORMAT | ZIP_PAGE_SIZE | SPACE_TYPE | INSTANT_COLS | TOTAL_ROW_VERSIONS | INITIAL_COLUMN_COUNTS | CURRENT_COLUMN_COUNTS | TOTAL_COLUMN_COUNTS |
+----------+---------+------+--------+-------+------------+---------------+------------+--------------+--------------------+-----------------------+-----------------------+---------------------+
|     2197 | demo/t1 |   33 |      7 |  1129 | Dynamic    |             0 | Single     |            0 |                  3 |                     4 |                     4 |                   7 |
+----------+---------+------+--------+-------+------------+---------------+------------+--------------+--------------------+-----------------------+-----------------------+---------------------+
1 row in set (0.00 sec)

Étape 2 : Interrogez les détails des colonnes en utilisant l'ID de la table :

SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID = 2197;

Exemple de sortie :

+----------+------+-----+-------+---------+-----+-------------+---------------+---------------+-----------------+--------------+------------------+--------------------------+
| TABLE_ID | NAME | POS | MTYPE | PRTYPE  | LEN | HAS_DEFAULT | DEFAULT_VALUE | VERSION_ADDED | VERSION_DROPPED | PHYSICAL_POS | VERSION_MODIFIED | PARENT_PHYSICAL_POSITION |
+----------+------+-----+-------+---------+-----+-------------+---------------+---------------+-----------------+--------------+------------------+--------------------------+
|     2197 | id   |   0 |     6 |    1283 |   4 |           0 | NULL          |             0 |               0 |            0 |                0 |                       -1 |
|     2197 | c1   |   1 |     6 |    1032 |   8 |           1 | NULL          |             1 |               0 |            6 |                0 |                        3 |
|     2197 | c2   |   2 |    13 | 2162942 |  60 |           1 | NULL          |             2 |               0 |            7 |                0 |                        4 |
|     2197 | c3   |   3 |    12 | 2166799 | 300 |           1 | NULL          |             3 |               0 |            8 |                0 |                        5 |
+----------+------+-----+-------+---------+-----+-------------+---------------+---------------+-----------------+--------------+------------------+--------------------------+
4 rows in set (0.02 sec)

Dans cette sortie, les colonnes c1, c2 et c3 affichent respectivement des valeurs PARENT_PHYSICAL_POSITION de 3, 4 et 5, ce qui confirme qu'elles ont été modifiées instantanément. La colonne id affiche -1, indiquant qu'il s'agit d'une colonne normale (non modifiée instantanément).

Remarque

Si PARENT_PHYSICAL_POSITION est égal à -1 pour une colonne que vous pensiez avoir modifiée instantanément, le système est revenu à l'algorithme COPY ou INPLACE. Vérifiez que les trois paramètres requis sont définis sur ON et que la colonne respecte les exigences de type et de contrainte prises en charge.