数据库
首页 > 数据库> > Mysql 8的四种隔离级别以及对应不同类型的锁

Mysql 8的四种隔离级别以及对应不同类型的锁

作者:互联网

文章目录

1. MySql 8的四个隔离级别


第一级别:read-uncommitted:


第二级别:read-committed:


第三级别:repeatable-read(可重复读):

repeateable-read级别只限制了增删改,并没有限制查询操作。


第四级别:serializable(串行化):

举个例子:

在第四级别中,有两个a,b事务,两个事务之间进行查询操作是不会变化的!查询操作是不会被事务阻塞的!

但是,如果其中有一个事务进行了增删改的操作,例如:事务a进行了update操作。就会触发串行化的机制。

这样事务a的update操作就会被卡住,要等到事务b提交事务后,事务a才能继续执行。如果期间事务b又进行了update的操作,因为串行化后会有表级锁,锁住!因此不能执行其他增删改操作,就会报错!

如果事务b进行了提交,那么事务a的update就会进行操作了。但是因为串行化已经被触发,之后执行查询操作也会被事务阻塞!

上面的过程多处涉及到锁的内容!

2. 不同类型的锁


锁的分类:

一般可以分为两类,一个是悲观锁,一个是乐观锁,悲观锁一般就是我们通常说的数据库锁机制,乐观锁一般是指用户自己实现的一种锁机制。

悲观锁按照使用性质划分:

悲观锁按照作用范围划分:

还有一个页锁,不常用。

3. 四个级别 对应的不同的锁


为了权衡『隔离』和『并发』的矛盾,ISO定义了四个事务的隔离级别,每个级别的隔离程度不同,允许出现的副作用也不同


我们说这个mysql的前提是使用的InnoDB类型mysql数据库:

锁机制:阻止其他事务对数据,各个隔离级别主要体现在读取数据时加的锁和释放时机

4. 如何测试每个隔离级别使用的什么锁?


我们可以自己创建两个cmd窗口命令,set autocommit = 0;关闭自动提交,使用start transaction或直接启动一个select语句都可以开启一个事务。

这样我们就可以模拟一下上面的流程效果了。

每次测试前,我们都可以进行一个commit;事务提交。

以下是通过sql命令常用的命令:

-- 修改级别的mysql语句:
set session transaction isolation level Repeatable Read;

在这里插入图片描述

5. 有关事务相关的文档内容总结


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签:事务,隔离,read,Mysql,增删,串行化,级别,四种
来源: https://blog.csdn.net/IT_Holmes/article/details/122641669