MySQL事务相关

意向锁:innodb中存在一个意向锁,比如一个事务正在对某一行加锁。另一个事务需要对整个表加表锁,为了防止第二个事务逐行去查找行级锁影响效率。第一个事务在获取行级锁之前,需要获取全表的意向锁。第二个事务只要知道第一个事务获取了意向锁,则无法获取表锁。意向锁只会与表锁冲突而不会与行锁冲突。

美团关于锁的文章
MVCC详细实现,关于高低水位

  • redolog:记录的是物理变化,用于实现ACID的D(durability)持久性,每次更新数据库先实现redolog,然后再刷新到磁盘,如果断电可以从redolog恢复,redolog是顺序写速度比直接改磁盘数据块
  • binlog:mysql自带的,不区分引擎,主要用于主从复制,记录的是逻辑变化,可以理解为每次的插入删除更新的sql语句,主服务器更新数据后,从服务器定期从主服务器的binlog中更新数据
  • undolog:记录的是每次更新语句的反向语句,也就是可以抵消这次更新的语句。主要用于回滚操作,也就是ACID的A实现,并且undolog还可以实现mysql的MVCC多版本并发控制的快照读操作。

MySQL的悲观锁与乐观锁

  • 多版本并发控制(MVCC)是一种用来解决读-写冲突的无锁并发控制,也就是为事务分配单向增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照。 这样在读操作不用阻塞写操作,写操作不用阻塞读操作的同时,避免了脏读和不可重复读
  • 乐观并发控制(OCC)是一种用来解决写-写冲突的无锁并发控制,认为事务间争用没有那么多,所以先进行修改,在提交事务前,检查一下事务开始后,有没有新提交改变,如果没有就提交,如果有就放弃并重试。乐观并发控制类似自选锁。乐观并发控制适用于低数据争用,写冲突比较少的环境。
全部评论

相关推荐

2025-12-27 22:35
门头沟学院 Java
点赞 评论 收藏
分享
2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务