MySQL事务和锁总结

阅读: 评论:0

MySQL事务和锁总结

MySQL事务和锁总结

目录

  • 事务ACID
  • 事务并发问题
  • 事务隔离级别
  • 锁机制
    • 乐观锁和悲观锁
    • 共享锁(Shared,S锁,读锁)和排它锁(Exclusive,X锁,写锁)
    • 表锁
    • 行锁
    • 间隙锁(Gap Lock)和临键锁(Next-key Locks)
      • 死锁
    • 意向锁
    • select for update

事务ACID

  • 原子性(Atomicity) :一个事务中的操作,要么全部成功,要么全部失败,可以通过undo log回滚。
  • 一致性(Consistent) :在事务的前后,数据都必须保持一致状态。如果事务在执行过程中被中断,导致一部分更新已经入库,但是这部分数据没有回滚,就出现了数据不一致。可以简单理解为和原子性类似,只是原子性关注的是行为,而一致性关注的是数据。
  • 隔离性(Isolation) :多个事务同时执行的时候,一个事务的执行不能影响到其他事务的执行,操作的数据也不能相互干扰。在SQL规范中定义了4个事务隔离级别,见后文。
  • 持久性(Durable) :一旦事务完成,它对于数据的修改需要永久保存到数据库中,即使系统故障宕机,重启也要能够恢复,可以依赖redo log实现crash safe。

关于undo log、redo log等可以参考,MySQL–buffer pool、redo log、undo log、binlog

事务并发问题

  • 脏读:一个事务A读取到了其它事务B未提交的更新数据,如果事务B对数据进行多次更新,那么之前读取的数据就是脏数据。同样的,如果事务B回滚,那么事务A读到的这个数据也是脏数据。
  • 幻读:一个事务A读取到了其它事务B新增的数据,可能导致事务A使用同样的查询条件查询多次,得到不一样的结果条数,主要出现在insert操作中。
  • 不可重复读:一个事务A对同一条数据进行多次读取,发现后面读取的数据和前面读取的数据不一致。

事务隔离级别

注:v代表能解决,x代表不能解决

事务隔离级别脏读不可重复读幻读
读未提交xxx
读已提交vxx
可重复读vvx
串行化vvv

MySQL默认的事务隔离级别是可重复读,另外,在InnoDB中,可重复读级别下,可以通过间隙锁

本文发布于:2024-01-31 08:53:09,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170666239027334.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:事务   MySQL
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23