Mysql online DDL特性(二)

简介: Mysql online DDL特性

基础材料:

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

添加STORED ALTER 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;
  删除STORED ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE;
  添加VIRTUAL ALTER 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;
  删除VIRTUAL ALTER 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;
PARTITION PARTITION BY 不涉及 不涉及 ALGORITHM=COPYLOCK={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=DEFAULTLOCK=DEFAULT

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

  REORGANIZE PARTITION 不涉及 不涉及

只允许ALGORITHM=DEFAULTLOCK=DEFAULT

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

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

只允许ALGORITHM=DEFAULTLOCK=DEFAULT

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

  REPAIR PARTITION 不涉及 不涉及  
  REMOVE PARTITION 不涉及 不涉及 ALGORITHM=COPYLOCK={DEFAULT|SHARED|EXCLUSIVE}

 



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
11月前
|
SQL 监控 关系型数据库
MySQL事务处理:ACID特性与实战应用
本文深入解析了MySQL事务处理机制及ACID特性,通过银行转账、批量操作等实际案例展示了事务的应用技巧,并提供了性能优化方案。内容涵盖事务操作、一致性保障、并发控制、持久性机制、分布式事务及最佳实践,助力开发者构建高可靠数据库系统。
|
SQL 存储 关系型数据库
菜鸟之路Day29一一MySQL之DDL
本文《菜鸟之路Day29——MySQL之DDL》由作者blue于2025年5月2日撰写,主要介绍了MySQL中的数据定义语言(DDL)。文章详细讲解了DDL在数据库和表操作中的应用,包括数据库的查询、创建、使用与删除,以及表的创建、修改与删除。同时,文章还深入探讨了字段约束(如主键、外键、非空等)、常见数据类型(数值、字符串、日期时间类型)及表结构的查询与调整方法。通过示例代码,读者可以更好地理解并实践MySQL中DDL的相关操作。
514 11
|
11月前
|
存储 关系型数据库 MySQL
介绍MySQL的InnoDB引擎特性
总结而言 , Inno DB 引搞 是 MySQL 中 高 性 能 , 高 可靠 的 存 储选项 , 宽泛 应用于要求强 复杂交易处理场景 。
429 15
|
11月前
|
关系型数据库 MySQL 数据库
MySql事务以及事务的四大特性
事务是数据库操作的基本单元,具有ACID四大特性:原子性、一致性、隔离性、持久性。它确保数据的正确性与完整性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读未提交、读已提交、可重复读、串行化)加以解决。MySQL默认使用可重复读级别。高隔离级别虽能更好处理并发问题,但会降低性能。
338 0
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
6037 56
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
|
SQL 关系型数据库 MySQL
MySQL 5.6/5.7 DDL 失败残留文件清理指南
通过本文的指南,您可以更安全地处理 MySQL 5.6 和 5.7 版本中 DDL 失败后的残留文件,有效避免数据丢失和数据库不一致的问题。
|
SQL 监控 关系型数据库
MySQL如何优雅的执行DDL
在MySQL中优雅地执行DDL操作需要综合考虑性能、锁定和数据一致性等因素。通过使用在线DDL工具、分批次执行、备份和监控等最佳实践,可以在保障系统稳定性的同时,顺利完成DDL操作。本文提供的实践和案例分析为安全高效地执行DDL操作提供了详细指导。
746 14
|
关系型数据库 MySQL
mysql事务特性
原子性:一个事务内的操作统一成功或失败 一致性:事务前后的数据总量不变 隔离性:事务与事务之间相互不影响 持久性:事务一旦提交发生的改变不可逆
|
存储 关系型数据库 MySQL
MySQL 8.0特性-自增变量的持久化
【11月更文挑战第8天】在 MySQL 8.0 之前,自增变量(`AUTO_INCREMENT`)的行为在服务器重启后可能会发生变化,导致意外结果。MySQL 8.0 引入了自增变量的持久化特性,将其信息存储在数据字典中,确保重启后的一致性。这提高了开发和管理的稳定性,减少了主键冲突和数据不一致的风险。默认情况下,MySQL 8.0 启用了这一特性,但在升级时需注意行为变化。
390 1

推荐镜像

更多