全部產品
Search
文件中心

ApsaraDB RDS:線上修改列類型

更新時間:May 13, 2026

AliSQL支援線上修改列類型功能(Online Modify Column),其將列類型修改操作下沉至InnoDB引擎層,實現了不阻塞讀寫的線上變更。

功能說明

背景:自社區MySQL 5.6版本起,大部分DDL均支援線上執行(Online DDL),DDL執行過程中可以對資料表進行正常的讀寫操作。但是對於修改列類型的操作,一直到MySQL 8.0版本都只能通過COPY DDL方式執行。AliSQL在社區MySQL的基礎上,實現了線上修改列類型功能,支援通過INPLACE DDL方式執行修改列操作。

簡介:AliSQL線上修改列類型(Online Modify Column)功能在修改列類型時無需在Server層通過COPY方式按行讀取和插入,而是將修改列類型操作下沉到InnoDB引擎層,複用社區INPLACE DDL的執行架構,整個修改列類型的執行過程和其他INPLACE DDL完全相同,修改列類型的過程中可以對資料表進行正常的讀寫操作。

適用範圍

如需使用線上修改列類型功能,執行個體的資料庫版本需滿足以下條件。當小版本不符合要求時,可以升級核心小版本

  • MySQL 8.4

  • MySQL 8.0:核心小版本大於等於20250731。

  • MySQL 5.7:核心小版本大於等於20251031。

使用線上修改列類型功能時,有以下限制:

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

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

    • 整數類型變大(類型修改):包括TINYINTSMALLINTMEDIUMINTINTBIGINT類型從小變大。例如:支援INTBIGINT修改,不支援BIGINTINT修改。

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

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

參數管理

參數說明

線上修改列類型功能受以下參數控制:

參數名稱

說明

loose_rds_upgrade_datatype_online_enable

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

  • 參數範圍:全域參數。

  • 資料類型:Boolean

  • 預設值:OFF

  • 取值範圍:ONOFF

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

修改參數

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

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

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

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

使用方法

您需要在控制台上設定loose_rds_upgrade_datatype_online_enable參數為ON,開啟線上執行修改列類型功能。假設待修改的資料表為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;

指定INPLACE演算法修改列類型

您可以指定INPLACE演算法線上修改列類型(含類型修改和長度擴充):

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

  • 長度擴充:指定INPLACE演算法擴充c2c3列類型長度。

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

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

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

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