事务,本质上是逻辑上的一组操作,这些操作要么一起成功,要么一起失败。为了确保事务的正确性和可靠性,存在四大关键特性:原子性、一致性、隔离性和持久性。原子性强调事务的不可分割性,即事务内部的操作必须作为一个整体执行,要么全部完成,要么全部回滚。一致性确保事务执行前后数据的完整性保持一致。隔离性是指在事务执行过程中,其他事务不应干扰到当前事务的执行。持久性意味着一旦事务结束,其对数据库的修改将被永久保存。如果忽视了隔离性,可能会引发多种安全性问题。脏读涉及一个事务读取到另一个事务未提交的数据,不可重复读则是在一个事务中读取到另一个事务已经提交的更新数据,导致查询结果不一致。虚幻读则是在一个事务中读取到另一个事务已经提交的插入数据,同样导致查询结果不一致。事务隔离级别用于控制事务间的并发执行,共有五种级别:DEFAULT、未提交读(read uncommited)、已提交读(read commited)、可重复读(repeatable read)和串行化(serializable)。默认隔离级别由数据库平台决定。最低级的未提交读允许其他事务读取未提交的数据,可能导致脏读、不可重复读和虚幻读。已提交读避免了脏读,但不可重复读和虚幻读仍有可能发生。可重复读避免了脏读和不可重复读,但虚幻读可能依然存在。最可靠的串行化则防止了所有读问题,但代价最高。MySQL默认采用可重复读,而Oracle默认采用已提交读。事务的传播行为定义了当一个事务方法被另一个事务方法调用时,应如何处理事务。Spring框架定义了七种传播行为:PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER和PROPAGATION_NESTED。这七种行为决定了事务如何在不同的方法调用间传播。在保证同一事务中,PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY和PROPAGATION_REQUIRES_NEW四种行为分别对应了不同的事务控制策略。在保证没有在同一事务中,PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER和PROPAGATION_NESTED则提供了非事务执行或异常处理的选项。特别地,PROPAGATION_NESTED允许在存在外层事务时启动嵌套事务,保证内层事务依赖于外层事务,外层事务失败时,会回滚内层事务。