带你了解下事务隔离级别和MVCC的关系

1.什么是事务:一个数据库事务通常包含对数据库进行读或写的一个操作序列。

2.事务的四大属性(ACID)
(1)原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
(2)一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
(3)隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
(4)持久性(Durability):一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。

3.数据库4种隔离级别
(1)读未提交(READ UNCOMMITTED) :一个事务还未提交时,它所作的变更就能被别的事务看到。
(2)读提交(READ COMMITTED) :一个事务提交后,它所作的变更才能被别的事务看到。
(3)可重复读(REPEATABLE READ) :一个事务执行过程中看到的数据,和这个事务在启动时候看到的数据是一致的。在可重复读级别,未提交的变更其他事务也不可见。
(4)串⾏化(SERIALIZABLE) :对同一行记录,读会加读锁,写会加写锁。当出现读写锁冲突的时候,后访问的事务会等待前面的事务执行完后才可继续执行。

4.事务的隔离级别解决的问题
(1)脏读:一个事务读到了另一个事务未提交修改过后的数据。
(2)不可重复读:⼀个事务只能读到另⼀个已经提交的事务修改过的数据,并且其他事务每对该数据进⾏⼀次修改并提交后,该事务都能查询得到最新值。
(3)幻读:⼀个事务先根据某些条件查询出⼀些记录,之后另⼀个事务⼜向表中插⼊了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另⼀个事务插⼊的记录也读出来。

5.如何设置事务的隔离级别
在这里插入图片描述
6.事务的启动

  1. 显式启动事务语句, begin 或 start transaction,配套的提交语句是commit,回滚语句是rollback。
  2. set autocommit=0,这个命令会将这个线程的⾃动提交关掉,意味着如果你只执⾏⼀个select语句,这个事务就启动了,⽽且并不会⾃动提交。这个事务持续存在直到你主动执⾏commit 或rollback 语句,或者断开连接。

7.版本链
在这里插入图片描述

8.事务隔离级别和MVCC的关系
(1)在 读提交 隔离级别下,这个视图是在每个SQL语句开始执⾏的时候创建的,在这个隔离级别下,事务在每次查询开始时都会⽣成⼀个独⽴的ReadView。
在这里插入图片描述
(2)可重复读,在第⼀次读取数据时⽣成⼀个ReadView,对于使⽤ REPEATABLE READ 隔离级别的事务来说,只会在第⼀次执⾏查询语句时⽣成⼀个 ReadView ,之后的查询就不会重复⽣成了,所以⼀个事务的查询结果每次都是⼀样的。
在这里插入图片描述
(3)串⾏化 隔离级别下直接⽤加锁的⽅式来避免并⾏访问。
(4)序列化 被称为数据库隔离级别的 ⻩⾦标准 ,它是绝⼤多数商业数据库系统中提供的最⾼隔离级别,⼀些⾼度⼴泛部署的系统甚⾄⽆法提供隔离级别与可序列化⼀样⾼,⾦融的场景居多,性能也是最差的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戏子 丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值