字段操作

本文为您介绍迁移 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 COLUMNMODIFY 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 COLUMNCHANGE COLUMN 会忽略 FIRST | AFTER 关键字。

使用限制

重要

由于 OceanBase 数据库 MySQL 租户本身的限制,如果存在以下场景,同步的 DDL 被成功转换后,执行到 OceanBase 数据库 MySQL 租户可能会报错。

  • 通过 MODIFY COLUMNCHANGE COLUMN 修改字段类型可能会失败:OceanBase 数据库 MySQL 租户不支持修改为某些字段类型。

  • 通过 MODIFY COLUMNCHANGE COLUMN 修改字段长度可能会失败。

  • 通过 ALTER COLUMN SET DEFAULT 设置默认值可能会失败:OceanBase 数据库 MySQL 租户不支持某些函数/表达式。

  • 不支持删除主键、唯一键、普通索引等相关的列,以及包含外键约束的列。