数据库事务是针对数据库操作的一系列操作的集合,它包含从事务开始到事务结束的所有数据库操作,要么全部执行,要么全部不执行。具体我以下面这个示例做详细说明:
比如银行转帐:
需求:从A帐户转帐100元钱到B的帐户里
转帐的事务包括:1:从A帐户取钱;2:B帐户收钱。只有当A帐户的钱成功取出并存入B帐户,A帐户完成扣款,B帐户完成存款操作,这样事务成功,事务结束。如果,当从A帐户取钱出来到存入B帐户并实现A帐户的扣款和B帐户的存款操作过程中,因为各种异常情况,没能实现,那么,所有执行的操作全部失效,退回到事务开始时的数据库状态。事务失败,事务结束。总之,事务的所有操作,要么都成功,要么都失败。
事务的控制原理:事务开始后,他会把前期对数据做的操作与修改存入缓存,用户在自己的终端可以预览变化,直到完成事务中所有对数据库的修改,并经过检查确认无误后,一次性提交并写入数据库,在提交之前,如果出现任何异常,所做的所有修改都可以取消。提交之后,就永久生效。提交成功后其他用户才可以通过查询浏览数据的变化。
从以上分析我们可以得出数据库事务的特性:
1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
那么在SPRING中是如何实现事物控制的呢?