列の型を変更する操作は、DML 操作をブロックします。PolarDB-X は、オンラインでテーブルをロックせずに列の型を変更できるオンライン列変更(OMC)機能を提供します。
サポートされているバージョン
テーブルをロックせずに列の型を変更するには、インスタンスが V5.4.18-17108394 以降である必要があります。
テーブルをロックせずに列を追加または削除するだけの操作の場合、インスタンスは V5.4.20-20241224 以降である必要があります。
データ管理 (DMS) を使用してテーブルをロックせずに操作を実行するには、インスタンスが V5.4.20-20241224 以降である必要があります。
インスタンスバージョンのルールについては、リリースノートをご参照ください。
インスタンスバージョンの表示方法については、インスタンスのバージョンを表示および更新するをご参照ください。
注意事項
シャードキー、パーティションキー、またはプライマリキーとして使用されている列の名前は変更できません。ただし、これらの列の型は変更できます。
シャードキー、パーティションキー、またはプライマリキーに含まれている列は削除できません。
新しく作成された列の定義に、
UNIQUEやKEYなどのキーワードを追加することはできません。生成列、または生成列の式で参照される列は変更できません。
MODIFY COLUMN、CHANGE COLUMN、DROP COLUMN、およびADD COLUMN操作のみがサポートされています。ADD INDEX、DROP INDEX、SET DEFAULTなどの他の操作はサポートされていません。
利点
AUTO モードと DRDS モードのデータベースがサポートされています。
複数の列の型を同時に変更できます。
同じ文を使用して、列の型を変更したり、列を追加または削除したりできます。
構文
ALTER TABLE 文は、PolarDB-X で ALGORITHM=OMC が指定されている場合にのみ、テーブルをロックせずに実行されます。キーワードが指定されていない場合は、デフォルトで標準の 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 モードのデータベースでテーブルをロックせずに列の型を変更する方法を示しています。
テーブル
t1を作成します。CREATE TABLE t1(a INT PRIMARY KEY, b TINYINT, c VARCHAR(10)) PARTITION BY KEY(a);テーブル
t1の列bとcの型を変更します。ALTER TABLE t1 MODIFY COLUMN b INT, MODIFY COLUMN c VARCHAR(30), ALGORITHM=OMC;テーブル
t1の列bの名前と型を変更し、BIGINT型の新しい列eを追加します。ALTER TABLE t1 CHANGE COLUMN b d INT, ADD COLUMN e BIGINT AFTER d, ALGORITHM=OMC;