MySQL数据库四种隔离级别的演示
发布日期:2021-05-06 23:58:25 浏览次数:25 分类:原创文章

本文共 1156 字,大约阅读时间需要 3 分钟。

1.事务之间的隔离性

第一级别:读未提交(read uncommitted)

数据在内存当中,没还没有写入硬盘,极其不稳定,如果断电数据将会丢失。

​ 对方事务还没有提交,我们当前事务可以读取到对方未提交的数据。
​ 读未提交存在脏读(Dirty Read)现象:表示读到了脏的数据。

(事务一开启后,事务二尽管没有commit,事务一都能读到事务二修改的数据。)

第二级别:读已提交(read committed)
对方事务提交之后的数据我方可以读取到。
这种隔离级别解决了: 脏读现象没有了。
读已提交存在的问题是:不可重复读。
(事务一开启后,只有事务二commit后,事务一才能读到事务二修改的数据。)

第三级别:可重复读(repeatable read) MySQL默认的隔离级别
这种隔离级别解决了:不可重复读问题。
这种隔离级别存在的问题是:读取到的数据是幻象。
(事务一开启后,尽管事务二已经commit,事务一仍然读到的是 起初开启事务那一刻的数据。)
造成 幻读 :意思就是实际上数据库的数据已经真实的发生了改变,但是此时事务读到的数据仍然是旧的数据。

第四级别:序列化读/串行化读(serializable)
解决了所有问题。
效率低。需要事务排队。

2.演示隔离级别

在这里插入图片描述

1.读未提交(read uncommitted)

​    设置事务的全局隔离级别:set global transaction isolation level read uncommitted;​	查看事务的全局隔离级别:SELECT @@global.transaction_isolation;         

(mysql8.0 之后由 SELECT @@global.tx_isolation --> SELECT @@global.transaction_isolation; )
在这里插入图片描述
在这里插入图片描述

2.读已提交(read committed)

   设置事务的全局隔离级别:set global transaction isolation level read committed;

在这里插入图片描述

3.可重复读(repeatable read)

   设置事务的全局隔离级别:set global transaction isolation level repeatable read;

在这里插入图片描述

4.序列化读/串行化读(serializable)

 设置事务的全局隔离级别:set global transaction isolation level serializable;

两个终端开启事务后,操作同一张表。会形成互斥。另一个事务需要等待 正在操作的事务完成后,才能恢复正常。
在这里插入图片描述
事务一 一旦提交结束该事务, 事务二就能正常操作了;马上得出了查询结果
在这里插入图片描述

上一篇:docker 镜像构建上下文理解
下一篇:Mysql索引底层B+树的实现原理以及Innodb和Myisam引擎存储的区别

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年03月25日 14时45分48秒