本文为您介绍迁移 MySQL 数据库的数据至 OceanBase 数据库 MySQL 租户时,ALTER TABLE DDL 字段操作支持的转换范围。
总览
ALTER TABLE tbl_name
[alter_option [, alter_option] ...]
alter_option: {
ADD [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
| ADD [COLUMN] (col_name column_definition,...)
| ALTER [COLUMN] col_name {
SET DEFAULT {literal | (expr)}
| SET {VISIBLE | INVISIBLE}
| DROP DEFAULT
}
| 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]
| ORDER BY col_name [, col_name] ...
| RENAME COLUMN old_col_name TO new_col_name
}
支持的范围
支持 ADD COLUMN 来添加列(多列),列定义的详情请参见 创建列。支持指定 FIRST | AFTER 关键字。
支持修改字段的默认值:
ALTER COLUMN SET DEFAULT
。支持删除字段的默认值:
ALTER COLUMN DROP DEFAULT
。支持修改列:
CHANGE COLUMN
和MODIFY COLUMN
。支持删除列:
DROP COLUMN
。
不支持的范围
如果同步的 DDL 包含以下不支持的定义,则整个建表语句会转换失败(输出空)。
不支持修改列的可见性:
ALTER COLUMN SET VISIBLE | INVISIBLE
。不支持
ORDER BY col_name
。不支持重命名列:
RENAME COLUMN
。ALTER TABLE t RENAME COLUMN d TO g;
忽略的属性
如果同步的 DDL 包含以下不支持的定义,则这些属性将不会被解析和转换,最终会被忽略。
MODIFY COLUMN
或CHANGE COLUMN
会忽略 FIRST | AFTER 关键字。
使用限制
由于 OceanBase 数据库 MySQL 租户本身的限制,如果存在以下场景,同步的 DDL 被成功转换后,执行到 OceanBase 数据库 MySQL 租户可能会报错。
通过
MODIFY COLUMN
或CHANGE COLUMN
修改字段类型可能会失败:OceanBase 数据库 MySQL 租户不支持修改为某些字段类型。通过
MODIFY COLUMN
或CHANGE COLUMN
修改字段长度可能会失败。通过
ALTER COLUMN SET DEFAULT
设置默认值可能会失败:OceanBase 数据库 MySQL 租户不支持某些函数/表达式。不支持删除主键、唯一键、普通索引等相关的列,以及包含外键约束的列。