花海

花海

数据库事务

2486
2023-03-09

事务的基本属性 ACID

  1. 原子性(Atomicity):事务中的所有操作都视为一个整体,要么全部完成,要么全部回滚。

  2. 一致性(Consistency):事务执行的结果必须使数据库从一个一致性状态转移到另一个一致性状态。在事务执行之前和之后,数据库必须满足所有的完整性约束。

  3. 隔离性(Isolation):并发事务的执行是相互隔离的,即一个事务的执行不应该受到其他并发事务的影响。

  4. 持久性(Durability):一旦事务完成提交,它对数据库的影响就应该是永久的,即使系统故障也不会丢失提交的结果

事务的传播行为

事务的传播行为是指一个事务方法调用另一个事务方法时,事务如何在这两个方法之间进行传播。在多个事务方法之间调用时,传播行为可以控制这些方法在同一个事务中执行还是在不同的事务中执行。

常见的行为

传播行为

单词意思

意义

REQUIRED

必需的

如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入该事务

SUPPORTS

支持

如果当前没有事务,就以非事务方式执行;如果当前已经存在事务,则加入该事务中

MANDATORY

强制性的

当前必须存在一个事务,否则抛出异常

REQUIRES_NEW

需要新的

新建一个全新的事务,如果当前存在事务,则挂起当前事务

NOT_SUPPORTED

不支持

以非事务方式执行操作,如果当前存在事务,则挂起该事务

NEVER

决不、永不

以非事务方式执行操作,如果当前存在事务,则抛出异常

NESTED

嵌套的

如果当前存在事务,则在嵌套事务中执行,如果当前没有事务,则新建一个事务。嵌套事务是相对于当前事务而言的,具有独立的保存点,但是必须依赖于外部事务的提交或回滚

事务的隔离级别

数据库中事务的隔离级别描述了不同事务之间的可见性和相互影响的程度。在并发事务处理中,隔离级别对于确保事务的正确执行和数据的一致性非常重要。

隔离等级

意义

问题

读未提交(Read Uncommitted)

一个事务可以读取另一个未提交事务的数据

脏读、不可重复读、幻读

读已提交(Read Committed)

一个事务只能读取另一个已提交事务的数据

不可重复读、幻读

可重复读(Repeatable Read)

一个事务在执行期间能够多次读取相同的数据,确保在事务执行期间,其他事务对数据进行的修改不会对当前事务可见

幻读

串行化(Serializable)

所有事务按顺序依次执行,避免了所有并发问题,但也牺牲了并发性能

不能并发执行

名词解释:

  1. 脏读:一个事务读取到了另一个未提交事务中的数据,导致数据的不一致性。

  2. 不可重复读:在一个事务内,多次读取同一数据时,由于其他事务的修改,导致数据不一致。

  3. 幻读:在一个事务内多次执行同一个查询语句,得到的结果集却不一致,这是因为其他事务对数据进行了插入或删除操作导致的。

隔离级别的选择取决于应用程序需要达到的数据一致性和并发性能之间的平衡。一般来说,越高的隔离级别会带来更高的数据一致性,但也会带来更多的性能开销。

只读事务

"事务只读"是指在数据库事务中,该事务只能读取数据,而不能进行数据的修改或删除操作。在只读事务中,所有的读取操作都是读取已提交的数据,即读取已经被其他事务修改或删除后的最新结果。

只读事务通常用于查询操作或数据报告生成等场景,因为这些操作只需要读取数据,而不需要对数据进行修改或删除。使用只读事务还可以提高数据库的并发性能,因为多个只读事务可以同时读取同一组数据,而不会发生数据冲突和并发控制的问题。

需要注意的是,只读事务不能执行任何的写操作,包括INSERT、UPDATE、DELETE等修改操作。如果在只读事务中执行这些操作,会导致事务失败并抛出异常。此外,只读事务也不能使用锁机制,因为锁操作也属于修改操作。

事务超时

事务超时是指当一个事务在执行过程中,超过了事先设定的时间限制,该事务会自动回滚并释放资源。这个时间限制可以由应用程序或数据库管理系统设置。

事务超时的设定可以避免长时间的事务占用数据库资源,导致数据库性能下降,同时还可以避免死锁等并发问题。如果一个事务占用了数据库资源很长时间,而其他事务需要这些资源,就会导致其他事务等待时间过长,影响系统的并发性能。

当一个事务超时时,数据库管理系统会回滚该事务并释放相关资源。应用程序可以通过捕获超时异常来处理这种情况,例如重新发起一个新的事务。

在实际应用中,事务超时的时间限制应该根据具体情况设置,需要考虑事务涉及的数据量、系统的负载情况等因素。如果设置时间过短,可能会导致事务无法完成,如果时间过长,则会浪费资源,影响系统性能。

  • 76