数据库事务隔离级别 与 脏读、不可重复读、幻读
事务的四大特征
原子性
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
一致性
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
隔离性
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
数据库事务隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read Uncommitted | √ | √ | √ |
Read Committed | x | √ | √ |
Repeatable Read | x | x | √ |
Serializable(降低并发行) | x | x | x |
脏读、不可重复读、幻读
脏读: 是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
个人理解
事务在执行时遇到异常可能会发生回滚,假设有这样的一个场景,当一个事务中有两个sql。第一个sql修改了某一个属性,但是事务并没有执行结束。这时另一个人访问了这个属性,会发生一种情况就是可以查到修改后的属性,这时如果在上面的第一个sql下面出现了异常,那么事务将会回滚,属性变回原本的属性,所以第二个人读到的数据就是脏读。
原本有100块钱,然后去提款机存钱,存了1000元,但是银行停电了,这个事务需要回滚,在回滚之前和存款之后有一个人查询了账号余额是1100这就是脏读。
不可重复读:(重点是修改)
个人理解
两个事务中,当一个事务在第一次查询的时候,得到一个结果,还没对这个结果进行处理。这时另一个事务来修改了第一个事务的值,导致第一个事务对接下来的逻辑处理会产生错误。这就是不可重复读。
幻读:(重点是新增或删除)
个人理解
两个事务中,当事务A先访问数据库有10条数据,这是事务B在数据库中添加了一条数据。当事务A再去查看的时候,发现查到了11条数据。感觉产生了幻觉,这就是幻读。
本文地址:https://blog.csdn.net/xiaozhezhe0470/article/details/109234621