美文网首页
mysql DDL与DML的并发关系

mysql DDL与DML的并发关系

作者: 尹楷楷 | 来源:发表于2020-12-23 18:21 被阅读0次

概念

一、修改列
1、修改列数据类型,还包括修改长度如varchar(10)==>varchar(20) 是不允许dml并发的

2、修改列名并且同时设置它为外键的时候是不允许dml并发的,若只是单纯修改列名就可以

3、添加是自增列的时候不允许和dml并发,若只是添加列则可以!

4、指定字符集/修改列的字符编码时不允许和dml并发

5、设置null、not null;设置、删除列默认值 都是允许dml并发的!

二、修改表

表的话注意下字符集就行了。修改表名是可以和dml并发的!

三、主键操作
1、删除主键而不新增主键不允许dml并发。注意,新增主键、和修改主键(更换主键作用的字段)是可以与dml并发的!

四、索引操作
1、添加全文索引 fulltext index不允许dml并发
2、添加空间索引 spatial index 不允许dml并发

五、虚拟列操作
1、Adding a STORED column 添加STORED虚拟列阻塞dml
2、Modifying STORED column order 修改STORED虚拟列顺序阻塞dml
3、Modifying VIRTUAL column order 修改VIRTUAL虚拟列顺序阻塞dml

六、分区操作

PARTITION BY 分区依据

ADD PARTITION 添加分区
DROP PARTITION 删除分区
DISCARD PARTITION 禁用分区
IMPORT PARTITION 导入分区
COALESCE PARTITION 聚结分区
REORGANIZE PARTITION 重组分区
OPTIMIZE PARTITION 优化分区
REBUILD PARTITION 重建分区
REMOVE PARTITIONING 移除分区

总结

我们ddl常用操作中,会阻塞dml的ddl有:

1、修改列数据类型,数据长度,如varchar(10) 改为varchar(20)
2、修改列字符编码
3、添加自增列
4、修改列名并指定外键
5、删除主键索引而不新增主键索引
6、添加全文索引 fulltext index
7、添加空间索引 spatial index
8、常见分区操作都会导致阻塞dml!

允许和dml并发的有:

1、修改列名不添加外键
2、添加一个非自增的列、删除列、移动列顺序
3、设置null、not null
4、添加、删除、修改 列默认值
5、添加主键索引、变更主键索引作用的字段
6、添加、删除、修改普通索引
7、添加、删除外键

参考资料

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

对实践的指导

像一些常用DDL操作如修改字段字符编码、修改字段数据类型都会导致锁住修改的表,出现 Waiting for table metadata lock。所以需要一些可以在线DDL的手段,可以手动覆盖 frm https://www.jianshu.com/p/0cdc671adfcf 。或者使用pt-online-schema-change 工具

相关文章

  • mysql DDL与DML的并发关系

    概念 一、修改列1、修改列数据类型,还包括修改长度如varchar(10)==>varchar(20) 是不允许d...

  • MySQL-DDL/DML并发

    场景 DDL(Data Definition Language)数据定义语言。DML(Data Manipulat...

  • MYSQL学习整理|高级SQL语句

    MYSQL的三种语言: DDL DML DCL DML(data manipulation language): ...

  • MySQL基础——DML语句

    上篇文章我们学习了MySQL基础——DDL语句,这篇文章学习MySQL基础——DML语句。 DML语句 DML英文...

  • MySQL 基础操作

    · MySQL中不分大小写· MySQL中分为DML(数据操作语言) 和 DDL(数据定义语音) DML(数据操作...

  • mysql初涉

    mysql中语句分类 mysql中sql语句分为四种类型,DDL,DQL,DML和DCL。 DDL(数据定义语言)...

  • MySQL中简单的数据操纵语言(DML),数据定义语言(DDL)

    MySQL中简单的数据操纵语言(DML),数据定义语言(DDL)数据操纵语言(DML-Data Manipulat...

  • Mysql--DDL&DML

    SQL 对大小写不敏感! 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。 ...

  • MySQL 基本语法

    Mysql 基础 SQL分类: DDL—数据定义语言(create,alter,drop)DML—数据操纵语言(s...

  • DML-数据操作语言

    1.DDL、DCL与DML DDL(Data Definition Languages)数据定义语言:这些语句定义...

网友评论

      本文标题:mysql DDL与DML的并发关系

      本文链接:https://www.haomeiwen.com/subject/yycunktx.html