Mysql online DDL特性(二)

本文详细解析了MySQL 5.7.24版本下各种在线DDL(数据定义语言)操作的特点,包括是否允许并发DML(数据修改语言)操作、是否只修改元数据、是否需要重建表等关键信息,覆盖索引、主键、列、外键等多种数据库对象的修改场景。

基础材料:

centos7.5  mysql 5.7.24


online DDL操作说明列表:

类型操作是否Inplace是否重建表是否允许并发DML是否只修改元数据备注
index创建或添加二级索引

仅在完成访问表的所有事务完成后才结束

索引的初始状态反映了表的最新内容

 删除索引

 

 重命名索引 
 添加FULLTEXT索引是*否*

FULLTEXT如果没有用户定义的FTS_DOC_ID

则添加第一个索引会重建表

FULLTEXT可以添加其他索引而无需重建表

 添加SPATIAL索引是*否*

SPATIAL如果没有用户定义的FTS_DOC_ID

则添加第一个索引会重建表

SPATIAL可以添加其他索引而无需重建表

 更改索引类型 
primary key添加主键对表进行重建,耗费IO
 删除主键

ALGORITHM=COPY支持删除主键而不在同一ALTER TABLE语句中添加新主键

对表进行重建,耗费IO

产生临时表时同样需要在原表路径生成表空间临时文件

 同时删除主键并添加

对表进行重建,耗费IO

COLUMN添加列是*

添加自增列时不允许并发DML,且mysql会自动设置LOCK=SHARED,用来替换默认的LOCK=DEFAULT

对表进行重建,耗费IO

 删除列对表进行重建,耗费IO
 重命名列 
 重新排序列对表进行重建,耗费IO
 设置/删除列默认值仅修改表元数据。默认列值存储在 表的.frm文件中,而不是InnoDB 数据字典中
 更改列数据类型

ALGORITHM=COPY支持更改列数据类型

对表进行重建,耗费IO

 扩展VARCHAR列大小

VARCHAR列大小从0增加到255个字节,可以使用inplace方式。

如果改为大于255的值,则只能使用ALGORITHM=COPY

 更改自动增量值否*修改存储在内存中的值,而不是数据文件。
 添加列NULL/NOT NULL对表进行重建,耗费IO
 修改ENUMSET列的定义 

GENERATED

COLUMN

添加STOREDALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) STORED), ALGORITHM=COPY;
 修改STORED列顺序ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED FIRST, ALGORITHM=COPY;
 删除STOREDALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE;
 添加VIRTUALALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL), ALGORITHM=INPLACE, LOCK=NONE;
 修改VIRTUAL列顺序ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL FIRST, ALGORITHM=COPY;
 删除VIRTUALALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE;
foreign key添加外键约束 
 删除外键约束 
table修改ROW_FORMAT对表进行重建,耗费IO
 修改KEY_BLOCK_SIZE对表进行重建,耗费IO
 设置持久表统计信息仅修改表元数据。
 指定字符集如果新字符编码不同,则重建表。
 转换字符集如果新字符编码不同,则重建表。
 OPTIMIZE优化表是*

OPTIMIZE TABLE tbl_name;

具有FULLTEXT索引的表不支持inplace 

 执行空重建表是*

ALTER TABLE tbl_name ENGINE=InnoDB;

具有FULLTEXT索引的表不支持inplace 

 重命名表重命名与表对应的文件而不进行复制
tablespace启用或禁用单表文件表空间加密ALTER TABLE tbl_name ENCRYPTION='Y', ALGORITHM=COPY;
PARTITIONPARTITION BY不涉及不涉及ALGORITHM=COPY, LOCK={DEFAULT|SHARED|EXCLUSIVE}
 ADD PARTITION不涉及不涉及

只允许ALGORITHM=DEFAULT,LOCK=DEFAULT

在保持共享锁的同时复制数据

 DROP PARTITION不涉及不涉及只允许ALGORITHM=DEFAULT,LOCK=DEFAULT
 DISCARD PARTITION不涉及不涉及只允许ALGORITHM=DEFAULT,LOCK=DEFAULT
 IMPORT PARTITION不涉及不涉及只允许ALGORITHM=DEFAULT,LOCK=DEFAULT
 TRUNCATE PARTITION 不涉及不涉及不复制现有数据。只删除行; 不会改变表本身或其任何分区的定义
 COALESCE PARTITION不涉及不涉及

只允许ALGORITHM=DEFAULT, LOCK=DEFAULT

在保持共享锁的同时复制数据

 REORGANIZE PARTITION不涉及不涉及

只允许ALGORITHM=DEFAULT, LOCK=DEFAULT

保持共享元数据锁的同时从受影响的分区复制数据

 EXCHANGE PARTITION不涉及不涉及 
 ANALYZE PARTITION不涉及不涉及 
 CHECK PARTITION不涉及不涉及 
 OPTIMIZE PARTITION不涉及不涉及ALGORITHMLOCK参数被忽略。重建整个表
 REBUILD PARTITION不涉及不涉及

只允许ALGORITHM=DEFAULT, LOCK=DEFAULT

保持共享元数据锁的同时从受影响的分区复制数据。

 REPAIR PARTITION不涉及不涉及 
 REMOVE PARTITION不涉及不涉及ALGORITHM=COPY, LOCK={DEFAULT|SHARED|EXCLUSIVE}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值