修改表 ALTER TABLE 的不兼容点

本文为您介绍迁移 MySQL 数据库的数据至 OceanBase 数据库 MySQL 租户时,MySQL 数据库执行的 ALTER TABLE DDL 支持被数据传输的 DDL 同步组件转换,但 OceanBase 数据库 MySQL 租户不支持执行的场景。

行内 CHECK 表达式中引用了其它列

  • MySQL 数据库

    • 不支持 ALTER TABLE ADD COLUM 行内 CHECK 表达式中引用了其它列(所有类型)。

    • 支持 ALTER TABLE MODIFY/CHANGE COLUM 行内 CHECK 表达式中引用了其它列(所有类型)。

  • OceanBase 数据库 MySQL 租户

    • 不支持 ALTER TABLE ADD COLUM 行内 CHECK 表达式中引用了其它列(所有类型)。

    • 不支持 ALTER TABLE MODIFY/CHANGE COLUM 行内 CHECK 表达式中引用了其它列(所有类型)。

      重要

      由于 OceanBase 数据库 MySQL 租户本身的限制,可能存在其它不支持的 CHECK 表达式。

修改列的类型

  • MySQL 数据库和 OceanBase 数据库 MySQL 租户的被修改列在有约束的情况下,对修改后的字段类型的限制有所不同。详情请参见 有约束的列修改类型

  • MySQL 数据库和 OceanBase 数据库 MySQL 租户的被修改列在没有约束的情况下,对修改后的字段类型的限制有所不同。详情请参见 没有约束的列修改类型

修改列的长度

  • MySQL 数据库和 OceanBase 数据库 MySQL 租户的被修改列在有约束的情况下,对修改列长度的限制有所不同。详情请参见 有约束的列修改长度

  • MySQL 数据库和 OceanBase 数据库 MySQL 租户的被修改列在没有约束的情况下,对修改列长度的限制有所不同。详情请参见 没有约束的列修改长度

修改列 NULLABLE 属性

  • MySQL 数据库

    非约束情况下,支持通过 CHANGE / MODIFY COLUMN 将 NULLABLE 修改为 NOT NULL,支持修改 NOT NULL -> NULLABLE、NULLABLE -> NULLABLE、NOT NULL -> NOT NULL。

    重要

    如果 NULLABLE 情况下存在 NULL 的数据,将无法修改 NULLABLE 为 NOT NULL。

  • OceanBase 数据库 MySQL 租户

    • 非约束情况下,不支持通过 CHANGE / MODIFY COLUMN 将 NULLABLE 修改为 NOT NULL。

    • 非约束情况下,支持修改 NOT NULL -> NULLABLE、NULLABLE -> NULLABLE、NOT NULL -> NOT NULL。

修改字符集或者 COLLATION

  • MySQL 数据库:支持

  • OceanBase 数据库 MySQL 租户:不支持

删除有约束的列

MySQL数据库和 OceanBase 数据库 MySQL 租户对于删除有约束的列的操作限制有所不同,详情请参见 删除有约束的列

CHANGE / MODIFY COLUMN NOT NULL 不支持和 COMMENT 语句同时存在

示例如下:

 ALTER TABLE T MODIFY C INT NOT NULL, COMMENT 'INT COLUMN';
  • MySQL 数据库

    • 非约束情况下,如果存在 COMMENT 语句,支持通过 CHANGE / MODIFY COLUMN 指定修改属性 NOT NULL、NULLABLE。

    • 有 PK、UK、KEY 和 FULLTEXT 约束的情况下,如果存在 COMMENT 语句,指定 NULL 执行报错,支持 NOT NULL。

  • OceanBase 数据库 MySQL 租户

    • 无论是否有约束,存在 COMMENT 语句的情况下,均不支持通过 CHANGE / MODIFY COLUMN 指定修改属性 NULLABLE -> NOT NULL、NOT NULL -> NOT NULL。

    • 非约束情况下,支持指定修改属性 NOT NULL -> NULLABLE、NULLABLE -> NULLABLE。

    • 有 PK、UK、KEY 和 FULLTEXT 约束的情况下,如果存在 COMMENT 语句,指定修改属性 NOT NULL -> NULLABLE,执行不报错但未生效。