三张时序图-彻底明白数据库事务隔离级别
要想讲清楚数据库的事务隔离级别,首先得明白数据库事务是什么,每件东西的诞生必有它的用途。先看一个小故事。
一个小故事
生活中有这种常见的场景:银行的转账,A同学账户中有1000元,B同学账户中有2000。现在A同学需要转账给B同学300。而在数据库的层面上来讲,这包含两个操作:首先在A账户中减去300,A账户的钱变为700,然后在B账户中加上300,B账户的钱变成2300。
问题思考:假设在A同学转账完成后,此时系统崩溃,B账户还没有来得及加上300元,这显然是大家不能接收的结果。
什么是事务?
事务则是将一系列的操作包装成为一个整体运算集合,这个运算集合要么都执行,要么都不执行。
所以,如果我们将这两个操作定义在一个事务中执行,那么很显然可以及时避免这种问题,即取款的这两个步骤要么都执行成功,要么都不执行。
事务的特性
一般来讲事务具备四个特性,简称ACID。
- A,Automicity 原子性,事务所引起的数据库操作要么都完成,要么都不执行
- C,Consistency 一致性,事务的执行前后数据总体是不变
- I,Isolation 隔离性,彼此之间进行隔离,尽可能让不同的事务之间影响最小
- D,Durability,持久性,一旦事务完成,系统必须保证任何故障都不会引起事务表示出不一致。
事务的并发所带来的问题
如果不考虑事务之间存在隔离性,在多个事务对同一张表进行操作时,将会产生数据的不一致性。一般来说可分为:脏读,不可重复读,幻读