MySQL——MySQL事务

什么是事务

一个最小的不可再分的工作单元,通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)
简单来说,就是A向B转账,A的钱减少了,B的钱增加了,这就是一个完整的事务。

事务的特性ACID

  • 原子性(Atomicity):事务是不可再分的单元
  • 一致性(Consistency):同一个事务里的SQL要么全部成功要么全部失败
  • 隔离性(Isolation):事务A和事务B互相隔离,互不可见
  • 持久性(Durability):事务的结束是把数据持久化到硬盘中

并发事务可能会导致的问题

  • 脏读:脏读就是一个事务读取了另一个事务还没有提交的数据。
    比如事务A是刘备向张飞转账,扣除刘备账户余额一个亿,事务B是张飞接受刘备的转账,张飞账户增加一个亿;但是事务A执行了转账语句,但是还没有提交事务,然后张飞发现自己银行账户多了一个亿,然后他兴奋的告诉刘备,“哥哥,我完成小目标啦!,我银行账户多了一个亿”,然后刘备发现张飞这厮已经有一个亿了,那还给他转钱干嘛,于是刘备回滚事务A【rollback】,张飞第二天查看账户,那一个亿又没了,这就是脏读
  • 不可重复读:不可重复读就是一个事务读取到了另一个事务提交的数据。
    比如事务A是刘备闲来无事,查看自己账户余额,事务B是张飞得到刘备的允许,掌管刘备的银行卡,张飞出门消费;刘备第一次查看余额,还剩一个亿,很开心,这时张飞出门买了一车茅台,花了五千万。刘备下一次查看余额时,发现自己没有动账户,咋少了五千万捏。然后,张飞良心发现,觉得自己对不起哥哥,于是它去卖了个肾,赚到一个亿,这时刘备账户里有了1.5亿,刘备下一次查看余额,发现钱又变多了,但是刘备老了,不喜欢这样的大起大落,这就是不可重复读,指更新操作。
  • 幻读:是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
    比如事务A是刘备排兵布阵,清点人数,事务B是张飞招兵买马,扩充军队。刘备在清点人数的时候,张飞安排新兵蛋子加入阵列,于是刘备一会清点出五千人马,一会清点出八千人马,这就是幻读,指插入删除操作

事务隔离级别

  1. 读未提交:read uncommitted
  2. 读已提交:read committed
  3. 可重复读:repeatable read
  4. 串行化:serializable
隔离级别脏读不可重复读幻读
read uncommitted可能可能可能
read committed不可能可能可能
repeatable read不可能不可能对于InnoDB引擎不可能
repeatable read不可能不可能不可能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值