一、数据库事务的定义 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。 1. 原子性(atomic),事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行 2. 一致性(consistent),事务在完成时,必须使所有的数据都保持一致状态。 3. 隔离性(insulation),由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。 4. 持久性(Duration),事务完成之后,它对于系统的影响是永久性的。 二、数据库事务并发可能带来的问题 如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。由于并发操作带来的数据不一致性包括:丢失数据修改、读”脏”数据(脏读)、不可重复读、产生幽灵数据: 假设数据库中有如下一张表: 1. 第一类丢失更新(lost update): 在完全未隔离事务的情况下,两个事物更新同一条数据资源,某一事物异常终止,回滚造成第一个完成的更新也同时丢失。 在T1时刻开启了事务1,T2时刻开启了事务2,在T3时刻事务1从数据库中取出了 id="402881e535194b8f0135194b91310001"的数据,T4时刻事务2取出了同一条数据,T5时刻事务1将age字段值更新为30,T6时刻事务2更新age为35并提交了数据,但是T7事务1回滚了事务age最后的值依然为20,事务2的更新丢失了,这种情况就叫做"第一类丢失更新(lost update)"。 2. 脏读(dirty read):如果第二个事务查询到第一个事务还未提交的更新数据,形成脏读。 |
Hibernate事务与并发问题处理 (转)
最新推荐文章于 2023-08-09 08:36:23 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)
摘要: 一、数据库事务的定义数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操 ...