暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

MySQL8.0.19 DDL即时操作INSTANT

原创 CuiHulong 2020-03-14
3861
  1. MySQL DDL即时INSTANT
    DDL即时Instant 功能自MySQL 8.0.12版本引入。在准备和执行期间,不会在表上采用独占元数据锁,并且表数据不受影响,从而使操作立即生效。允许并发DML。

那先看看官网描述作用:

  • 添加一个列。这个特性称为“即时添加列”。
  • 添加或删除虚拟列。
  • 添加或删除列默认值。
  • 修改ENUM或SET列的定义。同样的限制也适用于上述的ALGORITHM=INSTANT。
  • 更改索引类型。
  • 重命名表。同样的限制也适用于上述的ALGORITHM=INSTANT。

DDL里 ALTER命令附带常用的参数:

ALTER TABLE tbl_name [alter_specification [, alter_specification] ...] [partition_options] ALGORITHM [=] {DEFAULT|INSTANT|INPLACE|COPY} ALGORITHM子句主要用于性能比较,并在遇到任何问题时作为对旧的表复制行为的备份 LOCK = DEFAULTNONE(允许读和写), SHARED(允许读), EXCLUSIVE(独占锁)
  1. MySQL8.0.19版本测试:
    ##测试表
CREATE TABLE `t_temp` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` tinyint(4) NOT NULL, `create_time` datetime NOT NULL, `update_time` datetime NOT NULL, `addr` varchar(10) DEFAULT NULL, `sex` enum('M','F') DEFAULT NULL, PRIMARY KEY (`id`), key (name) ) ; ##添加一个字段,加到最后面 ALTER TABLE t_temp ADD addr varchar(10),ALGORITHM=INSTANT; ALTER TABLE t_temp ADD COLUMN sex ENUM('M', 'F'), ALGORITHM = INSTANT; ##初始化值 ALTER TABLE t_temp ALTER COLUMN age SET DEFAULT 10, ALGORITHM = INSTANT;``` ##重命名表明 ALTER TABLE t_temp1 RENAME TO t_temp2, ALGORITHM = INSTANT; ##变化长度【不可以】 ALTER TABLE t_temp MODIFY COLUMN addr varchar(10), ALGORITHM=INSTANT; ##drop column 【不支持】 ALTER TABLE t_temp DROP COLUMN addr, ALGORITHM = INSTANT;

重命名,添加,更改初始化值,长度变更 不行,删除 不行

##索引操作

## 主键可以操作 ALTER TABLE t_temp DROP PRIMARY KEY, ADD PRIMARY KEY(id),ALGORITHM = INSTANT; ##无索引的列,添加索引【失败】 mysql> ALTER TABLE t_temp ADD index addr(addr),ALGORITHM = INSTANT; ERROR 1845 (0A000): ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE. ##对存在的索引更改 mysql> ALTER TABLE t_temp DROP INDEX idx_nm, ADD INDEX idx_nm(name),ALGORITHM = INSTANT; ##索引长度变更【失败】 mysql> ALTER TABLE t_temp DROP INDEX idx_nm, ADD INDEX idx_nm(name(2)),ALGORITHM = INSTANT; ##唯一索引【失败】 ALTER TABLE t_temp ADD UNIQUE INDEX index_nm3(name); ALTER TABLE t_temp DROP INDEX index_nm3, ADD INDEX index_nm3(name),ALGORITHM = INSTANT; ##全文索引可以 ALTER TABLE t_temp ADD FULLTEXT index_nm4(name); ALTER TABLE t_temp DROP INDEX index_nm4, ADD FULLTEXT index_nm4(name),ALGORITHM = INSTANT; ##外键不行,外键关联的时候,【是不允许删除的】 ALTER TABLE t_temp DROP INDEX index_nm5, ADD INDEX index_nm5(name),ALGORITHM = INSTANT; ##innodb行格式不能是COMPRESSED,8.0.19版本测试是支持(应该是行溢出可能存在问题) ALTER TABLE t_temp ROW_FORMAT = DYNAMIC

同类型的索引 重建可以,无索引的字段添加不可以,唯一索引不可以,所以长度变更不可以,跟innodb 压缩没关系。

  1. 限制:
  • 只能顺序加列, 仅支持在最后添加列,而不支持在现有列的中间添加列
  • 不支持临时表,临时表只能使用copy的方式执行DDL
  • 不支持那些在数据词典表空间中创建的表
  • 数据字典中的表不能使用instant算法

总结:之前从其他技术分享中了解到一些信息,但自己亲测之后,不同点很多。可能版本的问题,所以很多事情还得自己动手。

最后修改时间:2022-12-27 13:53:29
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论