全部產品
Search
文件中心

:無鎖變更列類型

更新時間:Apr 09, 2025

鑒於普通方式修改列類型操作會阻塞之後的DML正常執行,所以PolarDB-X新增無鎖變更列類型(Online Modify Column,簡稱OMC)功能,允許以無鎖(線上)方式變更列類型。

版本限制

  • 無鎖變更列類型需要核心版本5.4.18-17108394及以上。

  • 對於僅增加或刪除列的無鎖變更操作,需要核心版本5.4.20-20241224及以上。

  • 通過DMS(資料管理)執行無鎖變更操作,需要核心版本5.4.20-20241224及以上。

說明

注意事項

  • 不支援修改拆分鍵、分區鍵以及主鍵的列名稱,但支援修改這些列的類型。

  • 不支援刪除拆分鍵、分區鍵以及主鍵包含的列。

  • 不支援新增列的列定義中包含UNIQUEKEY等關鍵字。

  • 不支援修改產生列以及產生列運算式中包含的列。

  • 僅支援MODIFY COLUMNCHANGE COLUMNDROP COLUMNADD COLUMN操作,其他變更類型均不支援,例如不支援ADD INDEXDROP INDEXSET DEFAULT等操作。

功能特點

  • 支援AUTO和DRDS模式的資料庫。

  • 支援同時變更多個列的列類型。

  • 支援在同一條語句中修改列類型以及增加或刪除列。

文法

ALTER TABLE語句只有當ALGORITHM=OMC時,才會以無鎖變更的方式執行。該演算法為PolarDB-X特有實現。未指定時預設採用標準MySQL演算法(可能會產生中繼資料鎖阻塞DML)。

ALTER TABLE tbl_name
    alter_option [, alter_option] ...
    ALGORITHM = OMC

alter_option: {
    table_options
  | ADD [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]
  | CHANGE [COLUMN] old_col_name new_col_name column_definition
        [FIRST | AFTER col_name]
  | DROP [COLUMN] col_name
  | MODIFY [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]
}

樣本

本例以AUTO模式資料庫為您展示無鎖變更列類型如何使用:

  1. 建立測試表t1

    CREATE TABLE t1(a INT PRIMARY KEY, b TINYINT, c VARCHAR(10)) PARTITION BY KEY(a);
  2. 修改t1表中b列和c列的列類型:

    ALTER TABLE t1 MODIFY COLUMN b INT, MODIFY COLUMN c VARCHAR(30), ALGORITHM=OMC;
  3. 修改t1表中b列的名稱和類型,並新增BIGINT類型的e列:

    ALTER TABLE t1 CHANGE COLUMN b d INT, ADD COLUMN e BIGINT AFTER d, ALGORITHM=OMC;