MySQL数据库四种隔离级别的演示

本文详细介绍了数据库事务的四个隔离级别:读未提交、读已提交、可重复读和序列化读,分析了各个级别的特点及存在的问题,如脏读、不可重复读和幻读。并提供了在MySQL中设置不同隔离级别的示例,展示了如何通过两个并发事务操作同一表来体现这些隔离级别的效果。
摘要由CSDN通过智能技术生成

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;

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值