Online DDL Operations

1、什么是 Online DDL

MySQL 的 DDL(Data Definition Language) 包括增减字段、增减索引等操作。在 MySQL 5.6 之前,MySQL 的 DDL 操作会按照原来的表复制一份,并做相应的修改。

Online DDL 常用的几种操作:索引相关操作、主键相关操作、列相关操作、表相关操作。

-- Online DDL操作:加索引
ALTER TABLE tableA
ADD INDEX idx_col1 (col1),ALGORITHM=INPLACE, LOCK=NONE,
ADD INDEX idx_col2 (col2),ALGORITHM=INPLACE, LOCK=NONE;

-- Online DDL操作:指定位置加字段
ALTER TABLE tableA 
ADD COLUMN col3 BIGINT UNSIGNED COMMENT '列3' AFTER col1, ALGORITHM=INPLACE;

-- Online DDL操作:不指定位置加字段
ALTER TABLE tableA 
ADD COLUMN col3 BIGINT UNSIGNED COMMENT '列3', ALGORITHM=INSTANT;

MySQL从5.6.17以后,支持在线修改表结构操作(online ddl),即在变更表结构的过程中,不阻塞dml和dql操作.

根据操作过程中是否需要表拷贝,online ddl可分为下面两大类:

1.需要表拷贝的 ddl 操作:
增加、删除、重排列。
增加、删除主键。
改变表的 ROW_FORMAT 或 KEY_BLOCK_SIZE属性。
改变的字段的null状态。
执行OPTIMIZE TABLE,优化表。
使用 FORCE 选项重建表。
使用ALTER TABLE … ENGINE=INNODB 语句。
首次创建全文索引。

2.不需要表拷贝的 ddl 操作:
创建、增加、删除普通索引。
创建第二个及后续的全文索引。
为字段设置默认值。
改变auto-increment值。
删除外键约束。
添加外键约束( 只有在foreign_key_checks=off时)
仅仅改变列的名称
设置表的持续统计选项(STATS_PERSISTENT, STATS_AUTO_RECALC STATS_SAMPLE_PAGES)

特别说明:全文索引需要特别注意,创建了全文索引的表基本上不支持在线ddl操作。

ySQL 5.6 Online DDL把这种特性扩展到了添加列、删除列、修改列类型、列重命名、设置默认值等等,实际效果要看所使用的选项和操作类别来定。

5、相关链接

https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html

https://blog.csdn.net/qq_35923846/article/details/138844057

https://cloud.tencent.com/developer/article/1843985

https://www.yisu.com/jc/33784.html

https://www.jianshu.com/p/03edd74f8346

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值