[Mysql5.7] DDL Algorithm 和 Lock type 简明

在使用Mysql数据库建立一个新的数据库实体:schema的时候,会要设置数据库的DDL(Data Definition Language)

要设置两个属性:

1.Algorithm

2.Lock Type

本文讨论这两个值的选项的含义和选择方案,使用版本Mysql DB 5.7.x

参考官方文档5.7 14.13.1 Online DDL Operations

目前较新版本的8.0的官方文档:官方文档8.0 15.12.1 Online DDL Operations

 

0.类型介绍 

 

对于Algorithm一共有3个选项:Default、In place、Copy

对于Lock Type一共有4个选项:Default、None、Shared、Exclusive

在写SQL语句的时候,也会出现这两个参数,例如写一个修改INDEX的sql语句:

ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name, ALGORITHM=INPLACE, LOCK=NONE;

 比较容易迷惑的是这个Default Setting for Algorithm \ Lock Type,下面结合官方的文档进行说明,这个思路同样使用于后续更新的高版本Mysql数据库的类型解释。

首先打开Mysql的官方文档,这里我用的是5.7版本,所以打开5.7的文档

可以从上面这行Renaming an index的sql语句接口看到其默认参数为ALGORITHM = INPLACE,LOCK = NONE

这就是勾选default的时候的设置 

1.Algorithm

1.1 Default

 按照mysql官方设置的sql语句的默认参数赋值。

1.2 In place

不会重建表,在原来的表上进行操作。

1.3 Copy

需要拷贝原始表,开销高于In Place,而且表很大的时候,可能因为磁盘的容量不足而操作失败。

1.4 小结

如果设置default,就会按照官方的设置的不同操作的默认实现逻辑进行,

否则按照设定的方式进行,当然有些操作和用户自己设定的方式可能会冲突。

因为并不是所有的操作都可以支持in place 构建。

2.Lock Type

2.1 Default

按照Mysql开发者设置的默认参数选择是否加锁(不加锁:None,加锁:互斥锁(exclusive),共享锁(shared lock))

2.2 None

不加锁。

2.3 Shared

共享锁。

2.4 Exclusive

互斥锁。

关于Mysql的锁详解可以参考:博客

另外一篇:个人觉得写得较为详细的博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值