You need to enable JavaScript to run this app.
导航
创建无锁结构变更工单(OnlineDDL)
最近更新时间:2025.04.15 14:29:04首次发布时间: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. 创建工单对话框,配置以下参数信息。

    参数说明
    创建人默认为当前登录的账号,不支持修改。
    工单标题(可选)自定义工单标题。工单标题的长度不能超过 200 个字符。
    数据库类型选择云数据库 MySQL 版

    工单类型

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

    说明

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

    执行方式

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

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

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

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

    执行开始时间

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

    说明

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

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

    执行结束时间

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

    说明

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

    实例从下拉列表中选择需要创建的工单的实例。
    数据库从下拉列表中选择需要创建工单的数据库。
    SQL 文本按需设置 SQL 语句。单次提交多条 SQL 语句时需用英文逗号(,)隔开。关于结构变更支持的 SQL 语句,具体请参见参考文档
    工单备注自定义您的工单备注,建议和您的业务相关,方便后续查找。
  6. 单击下一步

  7. 工单预检查配置向导页面,可查看包括语法检查安全规则检查权限检查影响行数(系统统计值,实际影响行数仍然以 SQL 执行为准)预检查项。

    说明

    • 如遇预检查未通过的情况,您可以单击检查项的结果详情列的查看详情,查阅未通过的具体原因,并在修复后重新创建工单。

    • 若您的账号为主账号,在语法检查和影响行数预检查均通过,但安全规则检查或权限检查未通过的情况下,可直接单击确定创建工单。

    • 若您的账号为子用户,在语法检查、影响行数预检查和权限检查均通过,且安全规则检查中无高预警检查项未通过的情况下,可直接单击确定创建工单。

  8. 单击确定

后续操作

参考文档

结构变更支持的 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;