You need to enable JavaScript to run this app.
导航
创建无锁结构变更工单(OnlineDDL)
最近更新时间:2024.07.18 11:25:30首次发布时间:2024.02.22 14:30:01

创建结构变更工单时,默认采用 OnlineDDL 的方式执行 SQL 命令。通过 OnlineDDL 工单可以协助您规避数据库锁表而导致的 DML 或查询阻塞问题。本文介绍如何在数据库工作台 DBW 控制台创建无锁结构变更工单即 OnlineDDL 工单。

前提条件

  • 已创建云数据库 MySQL 版实例和账号。详细操作,请参见创建实例账号

  • 实例已开启安全管控。详细操作,请参见开启安全管控

  • 已添加为 DBW 角色的用户。详细操作,请参见添加用户

  • 已授予添加为 DBW 角色用户相关权限。详细操作,请参见权限管理

注意事项

  • 在创建无锁结构变更工单时,选择的表需要有主键。

  • 仅支持选择开启安全管控的实例创建无锁结构变更工单进行纳管。

  • 仅支持在 DBW 用户管理内添加的用户创建工单。

  • 支持的 SQL 类型包括 ALTER TABLECREATE INDEXDROP INDEX,具体信息,请参见参考文档

  • OnlineDDL 执行期间请勿手动执行其他 DDL,否则可能会导致手动执行的 DDL 结果被覆盖。

操作步骤

  1. 登录 DBW 控制台

  2. 在顶部菜单栏,选择地域。

  3. 在左侧导航栏,选择数据管理 > 工单列表

  4. 工单列表页面,单击创建工单

  5. 创建工单对话框,配置以下参数信息。

    参数说明
    创建人默认为当前登录的账号,不支持修改。
    数据库类型选择云数据库 MySQL 版

    工单类型

    选择无锁结构变更。结构变更表示通过 ALTER TABLECREATE INDEXDROP INDEX 语句变更数据库的结构,该变更会改变数据库的结构,例如添加新的表、修改表的列等。

    说明

    默认优先采用 OnlineDDL 的方式执行 SQL 命令。

    执行方式

    按需选择执行方式,支持以下选择:

    • 审批后自动执行:审批后将自动执行 SQL 语句。

    • 审批后手动执行:审批后需申请人自行执行工单。

    • 审批后定时执行:审批后可按指定时间执行工单。

    执行开始时间

    按需设置开始执行工单的时间。

    说明

    • 执行方式选择审批后定时执行时,支持设置执行开始时间

    • 执行结构变更的时间段不可与实例的可维护时间段重叠。关于实例可维护时间窗口的详细信息,请参见设置可维护时间段

    执行结束时间

    按需开启和设置工单执行结束时间。

    说明

    执行方式选择审批后定时执行并设置了执行开始时间时,执行结束时间需晚于执行开始时间。

    实例从下拉列表中选择需要创建的工单的实例。
    数据库从下拉列表中选择需要创建工单的数据库。
    SQL 文本按需设置 SQL 语句。单次提交多条 SQL 语句时需用英文逗号(,)隔开。关于结构变更支持的 SQL 语句,具体请参见参考文档
  6. 单击提交工单

后续操作

参考文档

结构变更支持的 SQL 语句如下表所示。

分类DDL 操作SQL 模版

索引操作

添加索引

CREATE INDEX name ON table (col_list);

删除索引

DROP INDEX name ON table;

添加一个二级索引

ALTER TABLE tbl_name ADD INDEX name (col_list);

删除一个索引

ALTER TABLE tb_name DROP INDEX index_name;

重命名索引

ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name;

添加 FullText 索引

ALTER TABLE tbl_name ADD FULLTEXT INDEX name (col_list);

添加 SPATIAL 索引

ALTER TABLE tbl_name ADD SPATIAL INDEX name (col_list);

修改索引的类型

ALTER TABLE tbl_name DROP INDEX i1, ADD INDEX i1(key_part,...) USING BTREE;

列操作

添加列

ALTER TABLE table_name ADD COLUMN col_name column_definition;

删除列

ALTER TABLE table_name DROP COLUMN col_name;

列顺序重排

ALTER TABLE tbl_name MODIFY COLUMN col_name column_definition FIRST;

设置列的默认值

ALTER TABLE tbl_name ALTER COLUMN col SET DEFAULT literal;

删除列的默认值

ALTER TABLE tbl ALTER COLUMN col DROP DEFAULT;

修改列的 auto-increment

ALTER TABLE table AUTO_INCREMENT=next_value;

设置列为 NULL

ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NULL;

设置列 NOT NULL

ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NOT NULL;

修改 ENUM 或者 SET 列的定义

CREATE TABLE t1 (c1 ENUM('a', 'b', 'c'));
ALTER TABLE t1 MODIFY COLUMN c1 ENUM('a', 'b', 'c', 'd');

外键操作

新增外键限制

ALTER TABLE tbl1 ADD CONSTRAINT fk_name FOREIGN KEY(col1) REFERENCES tbl2(col2) referential_actions;

删除外键限制

ALTER TABLE tbl DROP FOREIGN KEY fk_name;

表操作

变更表字符集

ALTER TABLE `test_db`.`user` CHARACTER SET = utf8mb4, COLLATE = utf8mb4_bin;

修改 ROW_FORMAT

ALTER TABLE tbl_name ROW_FORMAT = row_format;

说明

row_format 的取值范围包括 rowcompactcompress

修改 KEY_BLOCK_SIZE

ALTER TABLE tb_name KEY_BLOCK_SIZE=key_block_size;

设置字符集

ALTER TABLE tbl_name CHARACTER SET = charset_name;

convert 字符集

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;

FORCE 重建表

ALTER TABLE tbl_name FORCE;