Todos los productos
Search
Centro de documentos

ApsaraDB RDS:Modify column types in seconds

Última actualización: Sep 03, 2026

AliSQL amplía las capacidades de MySQL 8.0 Community para admitir la modificación instantánea de tipos de columna. Esta operación modifica únicamente los metadatos en lugar de copiar todos los datos de la tabla, por lo que se completa en segundos sin importar el tamaño de la tabla.

MySQL 8.0 Community utiliza INSTANT DDL para agregar y eliminar columnas, lo cual evita la copia de datos. Sin embargo, para la modificación de tipos de columna recurre a COPY DDL, que reescribe toda la tabla. AliSQL extiende el framework INSTANT DDL para cubrir los cambios de tipo de columna mediante el mismo enfoque basado exclusivamente en metadatos.

Requisitos previos

Antes de empezar, asegúrese de contar con:

  • Una instancia de ApsaraDB RDS for MySQL que ejecute MySQL 8.0 con una versión menor del motor 20251031 o posterior

Si su instancia no cumple este requisito, actualícela primero:

Limitaciones

Restricción

Detalles

Motor de almacenamiento

Solo InnoDB

Columnas indexadas

No se admite la modificación de columnas indexadas

Columnas de clave de partición

No se admite la modificación de columnas incluidas en una clave de partición

Cambios de enteros compatibles

Solo ampliación: TINYINT → SMALLINT → MEDIUMINT → INT → BIGINT. Por ejemplo, se admite cambiar de INT a BIGINT, pero no de BIGINT a INT

Cambios de cadenas compatibles

Solo aumento de longitud en columnas CHAR y VARCHAR. Para cambiar de CHAR(M) a CHAR(N), N debe ser mayor que M

Parámetros

Esta función se controla mediante tres parámetros. Los tres deben establecerse en ON para que la modificación instantánea de tipos de columna funcione correctamente.

Parámetro

Descripción

Ámbito

Valor predeterminado

loose_rds_upgrade_datatype_instant_enable

Habilita la modificación instantánea de tipos de columna

Global

OFF

loose_rds_upgrade_datatype_online_enable

Habilita la modificación en línea de tipos de columna

Global

OFF

loose_innodb_instant_ddl_enabled

Interruptor principal para INSTANT DDL

Global

ON

Los tres parámetros son booleanos, aceptan ON u OFF y no requieren reiniciar la instancia.

Habilitar los parámetros

  1. Vaya a la página Instances. En la barra de navegación superior, seleccione la región donde reside su instancia de RDS. Localice la instancia y haga clic en su ID.

  2. En el panel de navegación izquierdo, haga clic en Parameter Settings.

  3. En la pestaña Modifiable Parameters, busque cada parámetro y establezca su valor en ON.

  4. Haga clic en OK y luego en Submit Parameters. En la ventana que aparece, seleccione un intervalo de tiempo para que el cambio surta efecto.

Modificar tipos de columna al instante

Los siguientes ejemplos utilizan esta tabla:

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

Todos los ejemplos usan ALGORITHM=INSTANT para ejecutar la modificación como una operación basada exclusivamente en metadatos.

Modificar un tipo de columna

Cambie el tipo de c1 de int a bigint:

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

Ampliar la longitud de una cadena

Aumente la longitud de c2 (CHAR) y c3 (VARCHAR):

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

Permitir que el sistema elija el algoritmo

Omita ALGORITHM= para que el sistema seleccione automáticamente el algoritmo más adecuado para modificar el tipo de columna:

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

Especificar ALGORITHM=INPLACE ejecuta la modificación en línea (mediante el método in-place), no de forma instantánea.

Comprobar la modificación

La versión actual no permite consultar por separado las columnas modificadas de forma instantánea. Puede obtener información sobre las columnas de la tabla mediante la siguiente consulta SQL. Si el valor de la columna HAS_DEFAULT es 1 en el resultado, significa que la columna se agregó mediante la función de adición instantánea de columnas o se modificó al instante.

SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID = 
(SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = "<database_name>/<table_name>");

Ejemplo de salida:

+----------+------+-----+-------+---------+-----+-------------+------------------------------------------------------------------------------------+
| TABLE_ID | NAME | POS | MTYPE | PRTYPE  | LEN | HAS_DEFAULT | DEFAULT_VALUE                                                                      |
+----------+------+-----+-------+---------+-----+-------------+------------------------------------------------------------------------------------+
|     1976 | id   |   0 |     6 |    1283 |   4 |           0 | NULL                                                                               |
|     1976 | c1   |   1 |     6 |    1032 |   8 |           1 | 0x38303030303030303030303030303030                                                 |
|     1976 | c2   |   2 |    13 | 2162942 |  60 |           1 | 0x32303230323032303230323032303230323032303230323032303230323032303230323032303230 |
|     1976 | c3   |   3 |    12 | 2166799 | 300 |           1 | 0x                                                                                 |
+----------+------+-----+-------+---------+-----+-------------+------------------------------------------------------------------------------------+