Mysql.事务隔离级别(transaction_isolation)

目录

前言

实验目的:

实验步骤:

实验过程、总结:

1.查看当前数据库的隔离级别

2.通过配置文件修改隔离级别

(1)修改为read-uncommitted读未提交级别:

(2)修改为read-committed读已提交级别:

(3)修改为repeatable-read读已提交级别:

(4)修改为serializable串行化级别:

3.创建两个线程来进行本实验

(1)验证读未提交(READ-UNCOMMITTED):

(2)验证读已提交(READ-COMMITTED):

(3)验证可重复读(REPEATABLE-READ):

(4)验证可重复读(SERIALIZABLE):


前言

       MySQL有四种不同的隔离级别:read-uncommit、read-commit、repeatable-read和serializable,这四种隔离级别分别解决了不同的数据一致性问题,也存在不同的问题,为了验证这些问题,我做了以下实验。

实验目的:

        认识四种隔离级别分别存在的不同问题

实验步骤:

  • 查看当前数据库的隔离级别
  • 通过配置文件修改隔离级别
  • 创建两个线程来进行本实验

实验过程、总结:

1.查看当前数据库的隔离级别

select @@变量名; 或者show variables like '变量名';

2.通过配置文件修改隔离级别

(1)修改为read-uncommitted读未提交级别:

(2)修改为read-committed读已提交级别:

 

 (3)修改为repeatable-read读已提交级别:

(4)修改为serializable串行化级别:

3.创建两个线程来进行本实验

(1)验证读未提交(READ-UNCOMMITTED):

<1>创建基表(第一线程

<2>启动事务并查表(第一线程第二线程

    

<3>更新数据 (第二线程

更新数据但是并未提交commit

<4>再次查表(第一线程

可是此时第一线程却出现了脏数据

(2)验证读已提交(READ-COMMITTED):

 <1>启动事务并查表(第一线程第二线程

<2>更新数据(第二线程

 第二线程

 

 <3>再次查表(第一线程

此时第二线程还未commit,第一线程再次查表时不会出现脏数据,这就解决了事务隔离中读未提交出现的脏读情况

 但是如果第二线程提交,第一线程就会出现幻读、不可重复读的情况

 (3)验证可重复读(REPEATABLE-READ):

 <1>启动事务并查表(第一线程第二线程

 <2>更新数据未提交(第二线程

  第二线程(未提交)

 

 第二线程(已提交)

 <3>再次查表(第一线程

从下面的结果可以看出无论第二线程提交或者未提交,第一线程都没有出现脏读和幻读的情况

第二线程(未提交查表)

 

 第二线程(已提交查表)

 当第一线程commit后再次查表时才会更新数据 

 

 <4>再次更新、查看操作(第一线程第二线程)

第二线程进行更新并提交

第一线程进行查看并更新提交

 第二线程再进行查看

此时第二进程查看自己刚刚更新的num=400的数据时会突然变为第一线程更新的500,所以第二线程就出现了更新丢失的情况

(4)验证可重复读(SERIALIZABLE):

该进程下虽然可以解决前面三种出现的问题,但是在效率上对比其他的较低

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值