mysql默认事务隔离级别

在可重复读(REPEATABLE READS)隔离级别中,基于锁机制并发控制的DBMS需要对选定对象的读锁(read locks)和写锁(write locks)一直保持到事务结束,但不要求“范围锁(range-locks)”,因此可能会发生“幻影读(phantom reads)”

在该事务级别下,保证同一个事务从开始到结束获取到的数据一致。

设置数据库事务为该级别:

SET  SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET  GLOBAL TRANSACTION ISOLATION LEVEL  REPEATABLE READ;

关系型数据库事务级别_事务隔离级别_亚洲事务特使什么级别

场景

事务1,在我们数据库中对student表修改,事务不提交

start TRANSACTION;
select * from student;
update student set name = 'a2' where id = 1;
select * from student;

事务2,查询student表数据,事务不提交

start TRANSACTION;
select * from student;

提交事务1后,事务2中继续查询

start TRANSACTION;
select * from student;
update student set name = 'a2' where id = 1;
select * from student;
COMMIT;

查询发现未获取到事务1的数据。

此事务级别保证了同一个事务获取数据一致。

幻读(phantom read)前提条件

InnoDB引擎,可重复读隔离级别,使用当前读时

表现

一个事务(同一个read view)在前后两次查询同一范围的时候事务隔离级别,后一次查询看到了前一次查询没有看到的行

两点需要说明:

1、在可重复读隔离级别下,普通查询是快照读,是不会看到别的事务插入的数据的事务隔离级别,幻读只在当前读下才会出现

亚洲事务特使什么级别_事务隔离级别_关系型数据库事务级别

2、幻读专指新插入的行,读到原本存在行的更新结果不算。因为当前读的作用就是能读到所有已经提交记录的最新值

幻读的影响

会造成一个事务中先产生的锁,无法锁住后加入的满足条件的行

产生数据一致性问题,在一个事务中,先对符合条件的目标行做变更,而在事务提交前有新的符合目标条件的行加入

这样通过binlog恢复的数据是会将所有符合条件的目标行都进行变更的

关系型数据库事务级别_亚洲事务特使什么级别_事务隔离级别

幻读产生的原因

行锁只能锁住行,即使把所有的行记录都上锁,也阻止不了新插入的记录

如何解决幻读

将两行记录间的空隙加上锁,阻止新记录的插入;这个锁称为间隙锁

间隙锁与间隙锁之间没有冲突关系

跟间隙锁存在冲突关系的,是往这个间隙中插入一个记录这个操作

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688