全部產品
Search
文件中心

ApsaraDB RDS:秒級修改列類型

更新時間:Aug 13, 2026

AliSQL支援秒級修改列類型功能,修改列類型時僅修改中繼資料而無需全量拷貝資料,可大幅降低修改耗時,提升營運效率。

功能說明

背景:社區MySQL從8.0版本開始支援INSTANT DDL,加列和刪列操作只需要修改中繼資料,而無需拷貝資料,DDL可以秒級完成。但是對於修改列類型的操作,社區MySQL 8.0還是只能通過COPY DDL的方式執行,DDL耗時較長。AliSQL在社區MySQL的基礎上,支援秒級修改列類型功能,通過INSTANT DDL的方式執行修改列類型操作。

簡介:AliSQL 秒級修改列類型(Instant Modify Column)功能在修改列類型時無需再進行資料拷貝,而是複用社區INSTANT DDL的執行架構,在修改列類型時,只需要進行中繼資料的修改,整個修改列類型的執行過程和其他INSTANT DDL完全相同,修改列類型的過程可以秒級完成。

適用範圍

資料庫版本需滿足以下要求才能使用秒級修改列類型功能,當版本不符合要求時,可以升級資料庫大版本或核心小版本:

  • MySQL 8.4

  • MySQL 8.0且核心小版本大於等於20251031

使用該功能時,有以下限制條件:

  • 引擎節流:僅支援InnoDB引擎。

  • 索引限制:不支援修改索引列。

  • 列類型限制:僅支援對以下資料類型進行類型修改或長度擴充:

    • 整數類型變大(類型修改):包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT類型從小變大。例如:支援INT向BIGINT修改,不支援BIGINT向INT修改。

    • 字串類型變長(長度擴充):包括CHAR類型和VARCHAR類型變長,例如:CHAR(M)修改至CHAR(N),需要N > M。

  • 其他限制:不支援修改分區鍵包含的列。

參數管理

參數說明

秒級修改列類型功能受以下參數控制:

參數名稱

說明

loose_rds_upgrade_datatype_instant_enable

  • 描述:秒級修改列類型功能開關。

  • 參數範圍:全域參數。

  • 資料類型:Boolean。

  • 預設值:OFF。

  • 取值範圍:ON或OFF。

  • 是否需要重啟執行個體:否。

loose_rds_upgrade_datatype_online_enable

  • 描述:線上修改列類型功能開關。

  • 參數範圍:全域參數。

  • 資料類型:Boolean。

  • 預設值:OFF。

  • 取值範圍:ON或OFF。

  • 是否需要重啟執行個體:否。

loose_innodb_instant_ddl_enabled

  • 描述:INSTANT DDL總開關。

  • 參數範圍:全域參數。

  • 資料類型:Boolean。

  • 預設值:ON。

  • 取值範圍:ON或OFF。

  • 是否需要重啟執行個體:否。

修改參數

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列中單擊參數設定。

  3. 在可修改參數頁簽內搜尋待修改參數,並配置參數值。

  4. 單擊確定,然後單擊提交參數,並在彈出的視窗中選擇生效的時間段。

使用方法

您需要在控制台上將以下三個參數的值設定為ON,開啟秒級修改列類型功能:

  • loose_rds_upgrade_datatype_online_enable

  • loose_rds_upgrade_datatype_instant_enable

  • loose_innodb_instant_ddl_enabled

為方便後續說明,假設待修改的資料表為t1,表結構如下所示:

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;

指定INSTANT演算法修改列類型

您可以指定INSTANT演算法秒級修改列類型(含類型修改和長度擴充):

  • 類型修改:指定INSTANT演算法修改c1列類型為bigint。

  • 長度擴充:指定INSTANT演算法擴充c2、c3列類型長度。

說明

如果將演算法指定為INPLACE,則表示線上修改列類型,而非秒級修改。

-- 類型修改:指定INSTANT演算法修改c1列類型
ALTER TABLE `t1` MODIFY `c1` bigint DEFAULT NULL, ALGORITHM=INSTANT;

-- 查看修改結果
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)

-- 長度擴充:指定INSTANT演算法擴充c2、c3列類型長度
ALTER TABLE `t1` MODIFY `c2` char(20) DEFAULT NULL, ALGORITHM=INSTANT;
ALTER TABLE `t1` MODIFY `c3` varchar(100) DEFAULT NULL, ALGORITHM=INSTANT;

-- 查看修改結果
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)

不指定演算法修改列類型

不指定演算法時,系統會自動選擇最合適的演算法執行列類型修改操作。

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

查看秒級修改的列

目前的版本不支援單獨查看秒級修改的列,通過如下SQL查看錶的列資訊,若查詢結果中HAS_DEFAULT列為1,則說明該列是通過秒級加列功能添加的列或者是秒級修改的列。

SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID = 
(SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = "<database_name>/<table_name>");
+----------+------+-----+-------+---------+-----+-------------+------------------------------------------------------------------------------------+
| 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                                                                                 |
+----------+------+-----+-------+---------+-----+-------------+------------------------------------------------------------------------------------+