Mysql并发问题分析之事务隔离

数据表:create table stuinfo(id int,age int);

insert into stuinfo values(1,2),(2,2),(2,3)

并发的问题~对于两个事务T1,T2。

    脏读: T1读取了已经被T2更新但还没有被提交的字段,若T2回滚,T1读取的内容就是临时且无效的 
    不可重复读: T1读取了一个字段,然后T2更新了该字段,T1再次读取同一个字段,值就不同了
    幻读: T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行,之后T1再次读取同一个表就会多出几行

 

第一步,打开管理员的命令CMD,重启Mysql

  •     net stop mysql  # 关闭mysql
  •     net start mysql # 打开mysql

第二步,验证第一种情况read uncommitted,打开两个cmd的窗口,分别有如下设置

设置当前的两个默认的会话窗口都为read uncommitted

且都set autocommit=0;# 将提交修改为用commite提交

set session transaction isolation level read uncommitted; #将其会话窗口设置为read uncommitted

然后两个窗口都得设置上 set autocommit=0; # 使得不是提交后数据库里面的数据就被确定修改

start transaction;#启动事务,两个窗口都要

对于隔离级别的"READ UNCOMMITED "并发的三种问题都会出现

 

 

第三步,验证第二种情况read committed,打开两个cmd的窗口,分别有如下设置

set session transaction isolation level read committed; #将其会话窗口设置为read committed

解决了脏读,却解决不了重复读和幻读

 

第四步,验证第三种情况repeatable read 打开两个cmd的窗口,分别有如下设置

set session transaction isolation level repeatable read; #将其会话窗口设置为repeatable read

解决了脏读,重复读,却解决不了幻读

 

第五步,验证第四种情况serializable打开两个cmd的窗口,分别有如下设置

set session transaction isolation level serializable; #将其会话窗口设置为 serializable

脏读,重复读,幻读都被解决了

 

 

 

                                 脏读        不可重复读    幻读
read uncommitted:  √                  √              √
read committed:      ×                  √              √
repeatable read:      ×                  ×              √
serializable:             ×                 ×               ×  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值