事务


张三(1000) 和 李四(1000) 要转钱  

张三向李四转钱 100

张三的钱数 -100 剩余900

李四的钱数 +100 剩余1100

在转钱的过程中 张三的钱减少 恰巧这个时候停电、程序出现了异常,导致张三钱减少但是李四的钱没有增多,这样的问题 就叫做事务安全问题。

 

一致性:张三和李四的钱数总和不变

原子性:张三的钱减少和李四的钱增多  要同时进行

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

 

事务线程

 

1. 脏读数据

   张三 李四 买东西

事务一: 张三给李四转账  转账成功

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

事务一 回滚

2. 不可重复读

  酒店前台 2个前台  a和b

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

  来了另一个客人  这个客人找的是 前台b  b把1101号房间开给了这个客人

3. 幻读(虚读)

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

 

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

(1) 串行化

想要完全的解决上述问题,一个办法,串行化(死锁),不推荐使用,效率太低。

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

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

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

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

(4) 读未提交数据

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值