事务

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

张三向李四转钱100

张三的钱数-100 900

李四的钱数+100 1100

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

 

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

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

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

 

事务线程

 

1、脏读数据

张三 从 李四 买东西

事务1.张三给李四转账  转账成功

事务2.李四查看账户  钱多了  他就发货了 提交了事务

事务1回滚

2、不可重复读

酒店前台 2个前台(A和B)

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

来了另外一个客人  这个客人找了前台B  B把1101号房间给了这个客人

3、幻读(虚读)

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

 

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

(1)串行化

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

(2)可重复读(Mysql数据库默认的隔离级别)可以防止脏读和不可重复读,不能防止幻读

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

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

(4)读未提交数据

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值