面试之事务隔离级别

2020-03-20  本文已影响0人  西海岸虎皮猫大人
1.背景

今天接受海尔的视频面试,第二个问题就是事务的隔离级别,又栽了跟头,貌似在这个问题上不止栽了一次了,面试官似乎也特别喜欢问这个问题,于是乎,集中解决一下。

2.概念
ACID

原子性、一致性、隔离性、持久性

原子性

要么全执行,要么不执行

一致性

比如转账,不能出现A扣钱而B没收到钱

隔离性

事务之间没有干扰,比如A取钱结束钱,B不能向A转账

持久性

事务完成后,所有更新保存到数据库,不能回滚

脏读

事务A读取了事务B更新的数据,然后B回滚,A脏读

不可重复读

事务A多次读取统一数据,在此过程中事务B进行了更新操作,导致事务A多次读取结果不一致

幻读

事务A插入已经检查不存在的数据,发现该数据存在

3.事务隔离级别
a.读未提交

假设事务A读,事务B更新,事务A会读取到B未提交的数据;如事务B回滚,则A读到的是脏数据

b.读已提交

事务A 开启
事务A select
事务B 开启
事务B update
事务A select 此时事务A不能查询到B未提交数据,解决了脏读问题
事务B 提交
事务A select 与第一次select结果不一致,产生了不可重复读问题

c.可重复读

事务A 开启
事务A select id = 1
事务B 开启
事务B insert id = 1 伪代码,插入id为1的数据
事务B 提交
事务A select 此时的select与第一次不会出现不一致的情况
事务A update、insert、delete会按照当前版本,select是历史版本
事务A select id = 1 与第一次结果一致,可重复读
事务A insert id = 1报错,出现幻读问题

d.串行化

事务A 开启
事务A select
事务B 开启
事务B insert 报错,由于串行化会锁表

参考:
https://www.cnblogs.com/wyaokai/p/10921323.html

上一篇下一篇

猜你喜欢

热点阅读