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

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

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

并发的问题~对于两个事务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

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

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

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

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

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

 

 

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

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

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

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

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

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

 

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

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

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

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

 

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

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

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

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

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章:

  • 2021-07-07
  • 2021-08-07
  • 2021-11-04
  • 2022-02-28
  • 2021-10-02
  • 2021-10-11
  • 2021-11-08
  • 2021-05-20
猜你喜欢
  • 2021-09-21
  • 2022-12-23
  • 2021-09-07
  • 2022-12-23
  • 2021-07-31
  • 2022-12-23
  • 2021-12-25
相关资源
相似解决方案