美文网首页技术文章首页推荐程序员
mysql锁(十)innodb下的悲观锁和乐观锁

mysql锁(十)innodb下的悲观锁和乐观锁

作者: b12af9baadf4 | 来源:发表于2016-09-14 17:20 被阅读2211次

    ****悲观锁与乐观锁****
    悲观锁,也叫悲观并发控制,当事务A对某行数据应用了锁,并且当这个事务把锁释放后,其他事务才能够执行与该锁冲突的操作,这里事务A所施加的锁就叫悲观锁。

    看到这里,会发现,我们之前学习的共享锁和排他锁(行锁,间隙锁,next-key lock)都属于悲观锁。

    乐观锁,也叫乐观并发控制,它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,那么当前正在提交的事务会进行回滚。


    ****悲观锁与乐观锁的实现方式****
    悲观锁的实现依靠的是数据库提供的锁机制来实现,例如select * from news where id=12 for update,而乐观锁依靠的是记录数据版本来实现,即通过在表中添加版本号字段来作为是否可以成功提交的关键因素。


    根据之前对锁的学习,我们可以大概可以看到innodb下各个锁之间的关系,如图:

    无论哪种锁,其实都是为了解决某类问题而出现,接下来,我们将介绍如何分析sql语句使用了哪种锁以及死锁的相关知识。

    相关文章

      网友评论

        本文标题:mysql锁(十)innodb下的悲观锁和乐观锁

        本文链接:https://www.haomeiwen.com/subject/mqevettx.html