Java 杂谈我爱编程程序员

数据库事务四大特性以及隔离级别

2018-07-25  本文已影响58人  BestbpF

一、事务四大特性(ACID)

事务可以理解为一系列操作的集合,如果一个数据库支持事务操作,则该数据库必须满足以下四个特性:

1. 原子性(Atomicity)

事务内包含的操作要么全部成功,要么全部回滚,如转账业务,不会出现一方扣钱而另一方没收到钱的情况。

2. 一致性(Consistency)

一个事务在执行前和执行后状态保持一致。依旧时转账业务,两个人的总账户金额一定,不管他俩之间如何转账交易,总账户金额总是不变的。

3. 隔离性(Isolation)

允许多个线程并发访问数据库,数据库会为每个线程开启独立的事务,一个事务的操作不能被其他的干扰,并发事务之间需要隔离。
数据库提供了多种隔离级别来解决不同的隔离问题(后面介绍)。

4. 持久性(Durability)

提交的事务会被永久保留在数据库中。

二、隔离级别

隔离级别是为了解决不隔离时出现的一系列问题,主要分为三种:脏读、不可重复读以及幻读。

1. 脏读

当事务A修改了某个数据但没有提交,事务B并发的访问了该数据,就会造成数据的读取不一致。依旧是转账业务:

2. 不可重复读

对于数据库中的一个数据,在一个事务内对该数据进行了多次重复查询,发现查询结果不一致。原因在于在该事务查询过程中,另一个事务修改了该数据并提交。
不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。

3. 幻读

例如当事务A删除了所有的X类数据,此时事务B又向数据库插入一些X类数据并提交。操作事务A的用户发现自己好像并没有全部都删除,就如同产生了幻觉一样。

4. 隔离级别
事务隔离级别(√代表会出现该问题)
上一篇 下一篇

猜你喜欢

热点阅读