java事务例子

事务

飞飞(1000)和麻子(1000)要转钱

飞飞向李四转钱100

飞飞的钱数-100  900

麻子的钱+100 1100

再转钱的过程中飞飞的钱减少 恰巧这个时候停电,程序出现了异常,导致飞飞的钱减少,但是麻子没有增多,这样的问题 就是事务安全问题

一致性:飞飞和麻子的钱数总数保持不变

原子性:飞飞的钱减少和李四的钱增多 要用时进行

持久性:  最终这些数据的改变要保存在数据库中     

事务线程

1. 脏读数据

飞飞从麻子 买东西

事务一:飞飞给麻子转账  转账成功

事务二:麻子查看账户,钱多了 他就发货了,提交了事务

事务一:回滚

2. 不可重复读

酒店前台 2个前台 AB

来了一个客人 这个客人想住1101 号房间  前台A

来了另一个客人 这个客人找的是 前台B B1101号房间给了这个客人

3. 幻读(虚读)

对一个订单表查询两次,另外一个事物已经添加了新的记录 之前查的是100条,现在发现是101

为了解决上述问题:提出一个隔离性:

1.

想要完全解决上述问题,一个方法串行化(死锁),但是这种东西不推荐使用。使用效率太低

2. 可重复读(MySQL数据库默认的隔离级别)

可以防止脏读和不可重复读,不能防止幻读

3. 读已提交数据(oracle默认的隔离级别)

可以防止脏读数据,不可以防止不可重复读和幻读

4. 读未提交数据

 所有问题都不解决 这种情况是所有隔离性中 性能最好的

猜你喜欢

转载自blog.csdn.net/qq_41961660/article/details/80778736