首页 > 其他分享 >ACID,事务,事务的实现原理,隔离级别

ACID,事务,事务的实现原理,隔离级别

时间:2022-11-29 22:00:26浏览次数:42  
标签:事务 隔离 Read 提交 ACID 级别 View

1 事务的四大特性ACID

原子性:一个事务的操作要么全部完成,要么全部不完成

一致性:事务操作前和操作后,数据满足完整性约束,就是数据库的总数据是一样的

隔离性:多个事务使用相同数据时,不会相互干扰

持久性:事务处理结束后,对数据的修改是永久的


2 事务的实现原理

对于「读未提交」隔离级别的事务来说,因为可以读到未提交事务修改的数据,所以直接读取最新的数据就好了;

对于「串行化」隔离级别的事务来说,通过加读写锁的方式来避免并行访问;

对于「读提交」和「可重复读」隔离级别的事务来说,它们是通过 Read View 来实现的,它们的区别在于创建 Read View 的时机不同,大家可以把 Read View 理解成一个数据快照,就像相机拍照那样,定格某一时刻的风景。「读提交」隔离级别是在「每个语句执行前」都会重新生成一个 Read View,而「可重复读」隔离级别是「启动事务时」生成一个 Read View,然后整个事务期间都在用这个 Read View


3 事务的隔离级别

读未提交(read uncommitted,指一个事务还没提交时,它做的变更就能被其他事务看到;

读提交(read committed,指一个事务提交之后,它做的变更才能被其他事务看到;

可重复读(repeatable read,指一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,MySQL InnoDB 引擎的默认隔离级别

串行化(serializable );会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行;


4 脏读、幻读、不可重复读

脏读:一个事务读到了另一个事务未提交的修改过的数据
不可重复读:在同一个事务内多次读取同一个数据,如果前后两次读到的数据不一样
幻读:在一个事务内多次查询某个符合条件的记录时,前后记录数量不一致

标签:事务,隔离,Read,提交,ACID,级别,View
From: https://www.cnblogs.com/xiaoovo/p/16936852.html

相关文章