暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在线修改列类型

酷数据库 2023-11-23
214

使用普通方式执行修改列类型操作时,数据节点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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论