Mysql的事务隔离级别

概念:多个连接在开启各自的事务操作数据库的时候,数据库要负责隔离级别,以保证数据的准确性。

不考虑隔离性的话可能引发以下问题:

1、脏读:一个事务读取到了另一个事务未提交的数据

2、不可重复读:一个事务中进行了多次查询,但是由于其他事务的修改和删除,每次返回的结果都是不一样的,此时发生不可重复读(a事务统计十点前的数据,b十点以后操作事务,进行了修改和删除的提交,a读到了这个b的数据,因此发生不可重复读)

3、幻读:同一个查询在同一事务中多次进行,由于其他提交事务的插入操作,每次返回的结果不同,因此返回的不同的结果集,此时发生幻读。

事务的隔离级别概念:Mysql隔离级别定义了事务和事务之间的隔离程度

四种隔离级别:

读未提交

读已提交

可重复读

可串行化

查看当前的连接的隔离级别

select @@tx_isolation

数据库默认的隔离级别是可重复读。

========================================

 

右边设置事务的隔离级别为:读未提交:

 =====================================================

 开启事务;

 -----------------------------

左边插入一条数据,并显示当前表内容:

右边此时查询数据库: 

左边还没有提交数据,但是右边却看到了数据,因此发生了脏读。

=========此时左边连接再进行一次修改,以及一次添加。

 

========右边连接获取数据:

 将修改和添加的数据都查询出来了,发生不可重复读与幻读。因此读未提交发生了脏读,不可重复读,以及幻读。

==============读已提交============

先将两个事务提交。 

 再开启新的事务。

=========

 左边的事务进行增加修改操作,并提交(未提交时,右边没有变化,也就是说不会出现脏读现象)

 

此时右边获取到了已提交的数据,

这时出现了一个问题,那就是我希望右边得到的数据是连接表时,那一刻的数据,但是现在表中数据不符合我的期望,它出现了不可重复读和幻读。这就是读已提交的缺陷。

===========可重复读=============

右边: 

 

----------------

左边:先添加一条数据,并修改一条数据

 

 此时右边查询会发现还是原来的数据;

----------

当左边提交了事务 ,

右边事务查询时依旧是原来的数据,无论怎么查询,右边始终是这三条数据,因此不会出现不可重复读和幻读现象。

========可串行化============

 

右边设置事务隔离级别为可串行化,并开启事务,

左边也开启事务, 

左边开启事务并添加与修改。 此时右边进行一次查询就会出现一个问题,会卡住,

 

因为左边还没有提交,右边表是串行的,它去查询时,会发现还没提交,那么右边就会进入等待状态。

 左边一提交,右边就可以查了。

============================================================隔离级别相关指令

 select @@tx_isolation  当前会话的隔离级别


SELECT @@global.tx_isolation; 系统当前隔离级别

SET SESSION TRANSACTION ISOLATION level    read UNCOMMITTED  设置会话隔离级别

SET GLOBAL TRANSACTION ISOLATION level  设置系统隔离级别

默认是可重复读,基本不需要改动。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值