本文为您介绍迁移 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,执行不报错但未生效。