mysql事务以及四种隔离级别的具体演示

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

在这里插入图片描述

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

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

在上图的表中执行回滚
在这里插入图片描述

可看到并没有发生变化,因为事务回滚到事务开启时的状态,并没有提交
可理解为修改后的数据(1000,1000)只保存到了内存,并没有提交到磁盘文件

在这里插入图片描述

并发事务处理带来的问题

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

举例演示
1.首先连上数据库,查看隔离级别,并更改隔离级别为最低 read uncommited

在这里插入图片描述

查看test表里面的内容

在这里插入图片描述

开始开启一个事务,最后未写commit,即没有结束

在这里插入图片描述

事务未结束,另开一个session,首先更改隔离级别,和上面一样

在这里插入图片描述

事务级别最低,session2已读到了脏数据

在这里插入图片描述

session1执行回滚(回滚也是代表结束事务)

在这里插入图片描述

session2再次读取数据,变回了原数据(也是一种不可重复读)

在这里插入图片描述

2. 将隔离级别为 read commited,然后开启事务,同样未结束

在这里插入图片描述

在session2 中同样更改隔离级别为read commited(此种级别可避免脏读)

在这里插入图片描述

并提交,未提交的话仍是在上一次的隔离级别(read uncommited)下读取的数据(会读到脏数据)

在这里插入图片描述

提交后成功更改隔离级别,未读到脏数据(避免了脏读问题)(脏数据指的是session1 中未提交的数据)

在这里插入图片描述

补充在session1中也应该提交,才能成功更改隔离级别。

在这里插入图片描述

事务未提交:

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

session1提交

在这里插入图片描述

session2再读,加上上一次读即连续两次读,读到不一样的数据(read commited级别下仍未避免不可重复读的问题)

在这里插入图片描述

记得session2收尾

在这里插入图片描述

3.更改事务级别为repeatable read
当前环境,记得commit,未结束

在这里插入图片描述

session1执行更改事务,更改数据,未提交

在这里插入图片描述

session2更改隔离级别并读取数据,未读到脏数据

在这里插入图片描述

接下来session1提交数据,表中的数据已更改为刘备

在这里插入图片描述

session2再读,避免了不可重复读,仍读到了上次session2窗口一样的数据,即对于同一个事务,同一次查询,应该要得到一样的数据

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

上一个事务提交后再开启一个新的事务,才会读到更新后的数据

在这里插入图片描述

接下来演示幻读,事务级别为repeatable read,不可避免幻读
查看当前表格内容,应该为刘备赵敏才是对的,由于没截到图。

在这里插入图片描述

在这里插入图片描述

session2中新插入一行内容,表格变为3行(刘备赵敏是对的)

在这里插入图片描述

session1再次更改表格,明明表格内容只有2行,发现变为3行数据发生了变化,发生了幻读(即session1在一次事务中读取到的数据发生了变化)。

在这里插入图片描述

再次查看变为了三行
在这里插入图片描述

4.更改为最高隔离级别,所有并发问题都可避免

在这里插入图片描述
在这里插入图片描述
简单总结
在这里插入图片描述
mysql 8.0中查看隔离级别指令 :
select @@transaction_isolation;

回滚
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL隔离级别包括读未提交(read uncommitted)、读已提交(read committed)、可重复读(repeatable read)和串行化(serializable)。读未提交隔离级别允许一个事务读取到其他事务提交的数据,这可能导致脏读问题。设置事务的全局隔离级别读未提交可以使用以下语句:`set global transaction isolation level read uncommitted;`[2]。读已提交隔离级别要求一个事务只能读取到其他事务已经提交的数据,避免了脏读问题。设置事务的全局隔离级别为读已提交可以使用以下语句:`set global transaction isolation level read committed;`[1]。可重复读是MySQL的默认隔离级别,它解决了不可重复读问题,即同一事务内多次读取同一数据得到的结果不会发生变化。然而,可重复读隔离级别引入了幻读问题,即虽然事务二已经提交,但事务一仍然读取到的是事务一开始时的数据。这可能导致事务一读取到额外的行或者未读取到已经存在的行。。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MySQL数据库四种隔离级别演示](https://blog.csdn.net/qq_36867807/article/details/115697664)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值