Online DDL
DDM支持通用的Online DDL操作:增加字段、删除字段、修改字段、设置默认值、修改编码、修改表名等。
Online DDL主要功能为在对应DDL上,提供ALGORITHM、LOCK显示声明的支持,并提供透传至后端数据库节点能力(此功能需满足DDM内核版本大于等于3.1.0版本)。
当DDM实例关联的DN实例为MySQL5.7版本时,Online 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,...)
| DROP [COLUMN] col_name
| ALTER [COLUMN] col_name {
SET DEFAULT {literal | (expr)}
| DROP DEFAULT
}
| CHANGE [COLUMN] old_col_name new_col_name column_definition
[FIRST | AFTER col_name]
| [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
| RENAME [TO | AS] new_tbl_name
| ALGORITHM [=] {DEFAULT | INPLACE | COPY}
| LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}
}
当DDM实例关联的DN实例为MySQL8.0版本时,Online 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,...)
| DROP [COLUMN] col_name
| ALTER [COLUMN] col_name {
SET DEFAULT {literal | (expr)}
| DROP DEFAULT
}
| CHANGE [COLUMN] old_col_name new_col_name column_definition
[FIRST | AFTER col_name]
| [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
| RENAME COLUMN old_col_name TO new_col_name
| RENAME [TO | AS] new_tbl_name
| ALGORITHM [=] {DEFAULT | INSTANT | INPLACE | COPY}
| LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}
}
在使用Online DDL语法时,最终ALGORITHM、LOCK选项生效位置为后端数据库,当后端有多个数据库时,DDM表现出的并发性可能与参数值不一致。
使用示例
增加字段
# 向表t2中增加字段x,类型为int,Online DDL 算法为inplace,锁为NONE ALTER TABLE t2 ADD COLUMN x INT, ALGORITHM=INPLACE, LOCK=NONE;
修改字段
# 修改表t2的字段x,修改字段类型为varchar(255),Online DDL 算法为copy,锁为shared ALTER TABLE t2 MODIFY x VARCHAR(255), ALGORITHM=COPY, LOCK=SHARED;
修改编码
# 修改表t2编码为utf8,排序算法为utf8_bin,Online DDL 算法为copy,锁为shared ALTER TABLE t2 CHARACTER SET utf8 COLLATE utf8_bin, ALGORITHM=COPY, LOCK=SHARED;