黑狐家游戏

简要描述数据库事务的四个特性以及四个事务隔离级别,数据库事务的四大特性及事务隔离级别

欧气 4 0

深入理解数据库事务管理的核心要素

一、数据库事务的四大特性(ACID)

简要描述数据库事务的四个特性以及四个事务隔离级别,数据库事务的四大特性及事务隔离级别

图片来源于网络,如有侵权联系删除

1、原子性(Atomicity)

- 原子性意味着事务是一个不可分割的工作单位,事务中的操作要么全部执行,要么全部不执行,在银行转账场景中,从账户A转出100元到账户B的操作是一个事务,这个事务包含两个操作:从账户A扣除100元以及向账户B增加100元,如果在执行过程中,由于某种原因(如系统故障)从账户A扣除100元成功,但向账户B增加100元失败,那么根据原子性的要求,整个事务必须回滚,即将账户A的金额恢复到转账之前的状态,就好像这个事务从来没有发生过一样。

- 在数据库系统中,为了实现原子性,数据库管理系统(DBMS)会使用日志文件,在事务执行过程中,所有的操作都会被记录到日志中,如果事务需要回滚,DBMS可以根据日志中的记录来撤销已经执行的操作,从而保证事务的原子性。

2、一致性(Consistency)

- 一致性要求事务必须使数据库从一个一致性状态变换到另一个一致性状态,数据库的一致性状态是指数据库中的数据满足所有的完整性约束,例如主键约束、外键约束等,继续以银行转账为例,在转账事务执行前后,银行系统的总资产(所有账户余额之和)应该保持不变,如果数据库中存在账户余额不能为负数的约束,那么在转账事务执行过程中,就不能出现某个账户余额变为负数的情况。

- 数据库管理系统通过执行事务中的操作以及在必要时回滚事务来维护数据库的一致性,在事务开始之前,数据库处于一致性状态,事务执行过程中如果出现违反一致性约束的情况,事务将被回滚,以确保数据库仍然保持一致性。

3、隔离性(Isolation)

- 隔离性规定多个事务并发执行时,一个事务的执行不能被其他事务干扰,每个事务都感觉不到其他事务在并发地执行,有两个事务T1和T2同时对同一个账户进行操作,T1是查询账户余额,T2是向该账户存入一笔钱,如果没有隔离性,T1可能会在T2更新账户余额的过程中读取到一个不一致的值,比如T1读取到账户余额的旧值,而不是包含T2存入金额后的新值。

简要描述数据库事务的四个特性以及四个事务隔离级别,数据库事务的四大特性及事务隔离级别

图片来源于网络,如有侵权联系删除

- 数据库通过不同的事务隔离级别来控制事务之间的隔离程度,后面会详细介绍事务隔离级别。

4、持久性(Durability)

- 持久性表示一旦事务提交,它对数据库中数据的改变就应该是永久性的,即使数据库系统出现故障,如断电、磁盘损坏等,已经提交的事务的结果也不能丢失,为了实现持久性,数据库管理系统会将事务对数据库的修改写入到磁盘等永久性存储介质中,数据库系统会采用多种技术来确保数据的持久性,例如在事务提交时,将数据的修改先写入日志文件,然后再将数据更新到磁盘上的数据文件中,如果在数据更新到磁盘之前系统出现故障,可以根据日志文件中的记录来恢复数据,保证事务的持久性。

二、事务隔离级别

1、读未提交(Read Uncommitted)

- 这是最低的事务隔离级别,在这个隔离级别下,一个事务可以读取到另一个未提交事务的数据修改,这种情况可能会导致脏读(Dirty Read)现象,事务T1修改了某条记录的值但尚未提交,事务T2在这个时候读取了这条记录,然后T1由于某种原因回滚了修改,这样T2就读取到了一个实际上并不存在(因为T1回滚了)的值,这就是脏读,这种隔离级别虽然并发性能较高,因为事务不需要等待其他事务提交就可以读取数据,但它可能会导致数据的不一致性,在实际应用中较少使用,除非对并发性能要求极高且对数据一致性要求相对较低的场景。

2、读已提交(Read Committed)

- 在这个隔离级别下,一个事务只能读取到已经提交的事务的数据修改,这就避免了脏读现象,事务T1修改了某条记录并提交后,事务T2才能读取到T1修改后的结果,这个隔离级别可能会导致不可重复读(Non - Repeatable Read)的问题,假设事务T1先读取了某条记录的值,然后事务T2修改并提交了这条记录,当T1再次读取这条记录时,发现值已经改变了,这种情况在需要多次读取同一数据且要求数据在读取期间保持不变的场景下可能会产生问题,不过在很多实际应用中,读已提交隔离级别是比较常用的,因为它在一定程度上平衡了并发性能和数据一致性。

简要描述数据库事务的四个特性以及四个事务隔离级别,数据库事务的四大特性及事务隔离级别

图片来源于网络,如有侵权联系删除

3、可重复读(Repeatable Read)

- 可重复读隔离级别确保一个事务在多次读取同一数据时得到相同的值,即使在这个期间其他事务对该数据进行了修改并提交,这就解决了不可重复读的问题,事务T1在执行过程中多次读取某条记录的值,在T1未结束之前,即使事务T2修改并提交了这条记录,T1仍然会读取到它第一次读取时的值,可重复读隔离级别可能会导致幻读(Phantom Read)现象,幻读是指一个事务在按照某个条件查询数据时,第一次查询没有某条记录,但是在事务执行期间,另一个事务插入了符合这个条件的记录并提交,当第一个事务再次按照相同条件查询时,就会发现多了一条之前没有的记录,就像出现了“幻影”一样,在一些对数据一致性要求较高的场景,如金融交易系统中,可重复读隔离级别被广泛使用。

4、串行化(Serializable)

- 这是最高的事务隔离级别,在串行化隔离级别下,事务的执行是顺序的,就好像事务是一个接一个地执行一样,完全避免了脏读、不可重复读和幻读等问题,这种隔离级别的并发性能是最低的,因为它严格限制了事务的并发执行,只有在对数据一致性要求极高,并且可以接受较低并发性能的场景下,如航空订票系统中的座位预订操作(必须确保同一座位不会被多个用户同时预订),才会使用串行化隔离级别。

数据库事务的四大特性和事务隔离级别是数据库管理中非常重要的概念,合理地运用事务的特性和选择合适的事务隔离级别,可以在保证数据一致性的前提下,最大限度地提高数据库系统的并发性能,满足不同应用场景的需求。

标签: #原子性 #一致性 #隔离性 #持久性

黑狐家游戏
  • 评论列表

留言评论