本地事务:在单体应用中,我们执行多个业务操作使用的是同一个连接,操作同一个数据库,操作不同表,一旦有异常我们可以容易整体凡人回滚

一、

id java 当前事务 java本地事务_回滚

二、事务的四大特征(ACID)

1、原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。
                    如:执行下单这个操作,由保存订单、锁库存、扣积分等子单元组成,三个子单元,哪怕一个子单元出现异常,以他都要回滚,代表这次操作的失败
        2、持久性:当事务提交或回滚后,数据库会持久化的保存数据。
        3、隔离性:多个事务之间。相互独立。
                    如:多个人执行下单操作,一个人下单失败事务回滚,并不影响其他人的操作
        4、一致性:事务操作前后,数据总量不变

三、事物的4种隔离级别由低到高

1、未提交读(Read  uncommitted)
                 第一个事务执行期间,第二个事务读取了,第一个事务还未提交的数据    
        2、已提交读(Read  committed)
                第一个事务执行期间,第二个事务读取了,第一个事务已提交的数据  
        3、可重复读(Repeatable read)
                第一个事务执行期间,只要第一个事务没有执行完,第二事务去读取第一个事务的数据,读取结果都是一样的
        4、串行化(Serializable)
                第一个事务执行完成后,第二事务才能去读取第一个事务的数据

四、事物的七种传播行为

id java 当前事务 java本地事务_id java 当前事务_02

例子:
             @Transactional // a事务
             public void a(){ 
                   b(); // b事务
                   c(); // 新事务()
                   i = 10 / 0;
             }

             @Transactional(propagation = PROPAGATION_REQUIRED) // 需要一个事务,当前有事务则共享当前的事务,若无则重写创建一个新的
             public void b(){
             }

            @Transactional(propagation = PROPAGATION_REQUIRES_NEW) // 需要一个新事务,无论当前有无事务都要创建一个新的
            public void c(){
             }
           a与b是共享一个事务的,只要a发生异常,a回滚、b也跟着回滚,则c不受影响

五、事物并发带来的问题

1、丢失更新:一个事务的更新覆盖了另一个事务的更新。
        2、脏读:一个事务读取了另一个事务未提交的数据。
        3、不可重复读:一个事务两次读取同一个数据,两次读取的数据不一致。
        4、幻象读:一个事务两次读取一个范围的记录,两次读取的记录数不一致。

六、事物并发问题的解决

id java 当前事务 java本地事务_数据库_03