MySql 事务隔离级别

1.查看 SELECT @@tx_isolation ;
或者:show variables like "%isolation%";

2.设置

1)read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决
2)read committed:读取已经提交的数据 :可以解决脏读 ,但是出现不可重复读---- oracle默认的
3)repeatable read:重读读取:可以解决脏读 和 不可重复读 ---mysql默认的
4)serializable:串行化:可以解决 脏读 不可重复读 和 虚读---相当于锁表

设置mysql的隔离级别:set session transaction isolation level 设置事务隔离级别。

事务隔离级别会产生的问题:
1、脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。
2、不可重复读(nonrepeatable read):同一查询在同一事务中多次进行,在此期间,由于其他事务提交了对数据的修改或删除,每次返回不同的结果。
3、幻读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,虽然查询条件相同,每次返回的结果集却不同。

测试的时候,要先确定mysql是否是自动提交,autocommit要为 OFF。
show variables like "%commit%";

要在开启事务(start transaction;)前设置隔离级别
 

测试:select * from emp where empno='7369';

1、开启一个事务,对empno='7369'的 sal 增加200,但是未提交事务

不同事务隔离级别下,开启事务,执行查询 select * from emp where empno='7369';

read uncommitted  sal=1200 产生了脏读,读取到另一个事务未提交的数据。

read committed  sal=1000

repeatable read sal=1000

2、将事务first的update进行提交,commit

read uncommitted  sal=1200 产生了不可重复读,同一个事务执行查询,查到了另一个事务提交的数据。

read committed  sal=1200 产生了不可重复读,同一个事务里面执行查询,查到了另一个事务提交的数据。

 

repeatable read sal=1000   解决了不可重复读,同一个事务里面多次查询,不能查到另一个事务提交的修改的数据,但是可以读到插入insert的数据。

repeatable read 再重新开启一个事务查询,这下sql=1200

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值