MySQL事务原理与优化最佳实践

听课问题

  1. 除了读未提交,有一个事务对一条数据进行了修改,但是另外又有一个没有加事务的查询sql,那么读取到的数据是原始数据还是没提交的数据。

答案:没加事务的查询读取的是老数据,等事务提交以后就会读取新修改的数据

  1. 除了读未提交,事务A修改一个 id = 5的数据之后没提交,事务B进来也修改相同id = 5的数据,那么会是什么现象? 是可以提交还是等待事务A提交或者回滚之后进行操作

答案: 会等待A事务修改完以后B再执行修改

ACID

A:原子性

在一个事务中要不全部成功要不全部失败。比如事务A中有两个update 第一个update A表 第二个update B表。那么这两个update语句要么全部成功,要么有一个失败另外一个就回滚掉。

C:一致性

  1. 从一个有效状态改为另外一个有效状态。需要其他三个特性共同维持。更是一种达到某种目的的约束,
  2. 比如A有500,B有100.那么A要给B转钱500,那么A减100,B加100,但是如果A成功了变成400,B失败了还是100没加上,这时候凭空少了100肯定是不行的,那么就需要使用原子性,B加100失败了连着A也一起回滚掉。
  3. 如果仅仅有原子性的情况,假设C也要给A转钱100并且成功提交了(此时A还没回滚但是减了100),而A给B转钱因为B失败了要回滚到500,C已经给A了100那么A应该有600,但是C当时读到了的是已经减去了100的A也就是400,加了100变为500,A又因为B失败回滚到了500,导致C凭空消失了100元A也没加上这100,这时候应该有隔离性,A没提交C要修改A的数据就要等待因为有读锁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值