使用普通方式执行修改列类型操作时,数据节点DN上会阻塞DML,影响业务执行。PolarDB-X新增在线修改列类型(Online Modify Column,简称OMC)功能,允许以在线方式修改列类型。
注意事项
限制目前使用在线修改列类型时有如下限制:
- 仅5.4.15及以上版本支持该功能。
- 一条
ALTER TABLE语句只支持对一列进行修改。 - 修改的列不能是自增列。
- 修改的列不能是主键中的列。
- 修改的列不能是主表或GSI的拆分键中的列。
- 修改的列不能是包含在GSI中的列(此项限制可以通过执行
/*+TDDL: cmd_extra(OMC_ALTER_TABLE_WITH_GSI=true)*/解除)。 - 表中不能存在全文索引。
支持类型可以分为4类:
- 准确值类型:tinyint、tinyint unsigned、smallint、smallint unsigned、mediumint、mediumint unsigned、int、int unsigned、bigint、bigint unsigned、decimal。
- 近似值类型:float、double。
- 字符串类型:char、varchar、binary、varbinary。
- 日期时间类型:date、datetime、time、year。
对于以上4种类型,有以下限制:
- 只支持同一类类型之间的转换。
- 修改前后的类型不能相同(varchar、varbinary等类型长度不同视为不同类型)。
使用方法
当ALTER TABLE语句中未指定ALGORITHM算法或指定为其它算法,例如INPLACE或COPY时,默认使用普通的方式执行,会阻塞DML的执行。当ALGORITHM算法指定为OMC时,则使用在线修改列类型方式执行。
- 执行以下命令,创建测试表t1:
CREATE TABLE t1(a int primary key, b tinyint) dbpartition by hash(a); - 执行以下命令,修改t1表的列类型:
ALTER TABLE t1 MODIFY COLUMN b int, ALGORITHM=OMC; - 执行以下命令,修改t1表中b列的名称和类型:
ALTER TABLE t1 CHANGE COLUMN b c bigint, ALGORITHM=OMC;
说明
如果在该列上创建了局部索引,那么在DDL执行过程中,执行 SHOW CREATE TABLE时有可能看到DDL创建的临时局部索引。此外,如果SQL中使用FORCE INDEX指定了该列上的局部索引,那么在DDL的执行过程中,该SQL有可能会短暂执行失败。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




