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: |
|
Cambios de cadenas compatibles |
Solo aumento de longitud en columnas |
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 |
|
|
Habilita la modificación instantánea de tipos de columna |
Global |
|
|
|
Habilita la modificación en línea de tipos de columna |
Global |
|
|
|
Interruptor principal para INSTANT DDL |
Global |
|
Los tres parámetros son booleanos, aceptan ON u OFF y no requieren reiniciar la instancia.
Habilitar los parámetros
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.
En el panel de navegación izquierdo, haga clic en Parameter Settings.
En la pestaña Modifiable Parameters, busque cada parámetro y establezca su valor en
ON.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;
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 |
+----------+------+-----+-------+---------+-----+-------------+------------------------------------------------------------------------------------+