Todos los productos
Search
Centro de documentos

ApsaraDB RDS:Modificación en línea del tipo de columna

Última actualización: Sep 03, 2026

En MySQL Community, cambiar el tipo de datos de una columna requiere el algoritmo COPY, que reescribe cada fila en la capa del servidor y mantiene un bloqueo de tabla durante todo el proceso, lo cual impide cualquier operación de lectura o escritura. La función Online Modify Column de AliSQL elimina este tiempo de inactividad al trasladar la operación a la capa del motor InnoDB, lo que permite modificar los tipos de columna mientras las lecturas y escrituras continúan sin interrupciones.

Funcionamiento

MySQL Community (incluida la versión 8.0) utiliza el algoritmo COPY para los cambios de tipo de columna: lee cada fila y la reescribe una por una en la capa del servidor, y bloquea la tabla durante toda la duración del proceso. AliSQL resuelve esto al mover la modificación del tipo de columna a la capa del motor InnoDB y reutilizar el marco de ejecución de DDL INPLACE de la versión community. El resultado es el mismo comportamiento que en otras operaciones DDL INPLACE: la tabla permanece totalmente accesible durante todo el proceso.

Operaciones compatibles

Online Modify Column admite dos categorías de cambio. Ambas requieren el motor InnoDB.

Operación

Tipos compatibles

Dirección

Ejemplo

Modificación de tipo

TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT

Solo aumento de tamaño

INT a BIGINT: compatible. BIGINT a INT: no compatible.

Extensión de longitud

CHAR, VARCHAR

Solo aumento de longitud

CHAR(10) a CHAR(20): compatible. La longitud debe aumentar.

Limitaciones:

  • Solo se admiten tablas InnoDB.

  • No se pueden modificar las columnas que forman parte de una clave de partición.

Requisitos previos

Para usar Online Modify Column, su instancia debe cumplir con los siguientes requisitos de versión. Si la versión secundaria del motor es anterior a la requerida, actualice la versión secundaria del motor.

  • MySQL 8.0: versión secundaria del motor 20250731 o posterior

  • MySQL 5.7: versión secundaria del motor 20251031 o posterior

Habilite Online Modify Column

Online Modify Column se controla mediante el parámetro loose_rds_upgrade_datatype_online_enable.

Parámetro

Descripción

Ámbito

Tipo de dato

Valor predeterminado

Valores válidos

Reinicio obligatorio

loose_rds_upgrade_datatype_online_enable

Habilita o deshabilita Online Modify Column

Global

Booleano

OFF

ON, OFF

No

Para habilitar la función:

  1. Vaya a la página Instances. En la barra de navegación superior, seleccione la región donde reside la instancia. Busque 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 Editable Parameters, busque loose_rds_upgrade_datatype_online_enable y establezca su valor en ON.

  4. Haga clic en OK y luego en Submit Parameters. En el cuadro de diálogo, seleccione cuándo aplicar el cambio.

Modifique tipos de columna en línea

Después de habilitar la función, utilice ALTER TABLE con ALGORITHM=INPLACE para modificar los tipos de columna en línea.

Los siguientes ejemplos utilizan la tabla t1 con este esquema:

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;

Especifique ALGORITHM=INPLACE explícitamente

Especificar ALGORITHM=INPLACE garantiza que la operación utilice el método en línea.

-- Type modification: change c1 from INT to BIGINT
ALTER TABLE `t1` MODIFY `c1` bigint DEFAULT NULL, ALGORITHM=INPLACE;

-- Verify the result
SHOW CREATE TABLE `t1`\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int NOT NULL,
  `c1` bigint DEFAULT NULL,
  `c2` char(10) DEFAULT NULL,
  `c3` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
1 row in set (0.00 sec)

-- Length extension: extend c2 from CHAR(10) to CHAR(20)
ALTER TABLE `t1` MODIFY `c2` char(20) DEFAULT NULL, ALGORITHM=INPLACE;

-- Length extension: extend c3 from VARCHAR(50) to VARCHAR(100)
ALTER TABLE `t1` MODIFY `c3` varchar(100) DEFAULT NULL, ALGORITHM=INPLACE;

-- Verify the result
SHOW CREATE TABLE `t1`\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int NOT NULL,
  `c1` bigint DEFAULT NULL,
  `c2` char(20) DEFAULT NULL,
  `c3` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
1 row in set (0.00 sec)

Omitir la cláusula ALGORITHM

Si omite ALGORITHM, el sistema selecciona automáticamente el algoritmo más adecuado para modificar el tipo de columna.

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