码迷,mamicode.com
首页 > 数据库 > 详细

Mysql:行锁 表锁 乐观锁 悲观锁 读锁 写锁

时间:2019-06-14 14:11:43      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:版本号   适用于   资源   sam   http   写锁   钥匙   isa   线程   

锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。

技术图片

行锁

锁定整个行数据,开销大,加锁慢,会出现死锁。锁定粒度小,发生锁冲突的概率低,并发度高。

表锁

锁定整个表数据,开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突概率高,并发度低。

悲观锁

每次取数据时都认为别人会修改,所以每次取数据的时候都会上锁,这样别人想拿这个数据就会被阻塞,直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。适用于“写多读少”的场景。

乐观锁

每次取数据时都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。适用于“读多写少”的场景,这样可以提高吞吐量。数据库中的write_condition机制就是乐观锁。

共享锁

共享锁指的是对于多个不同的事务,对同一个资源共享同一个锁。相当于对于同一把门,它拥有多个钥匙一样。共享锁也属于悲观锁的一种,通过在执行语句后面加上lock in share mode就加上共享锁了。

 

Mysql:行锁 表锁 乐观锁 悲观锁 读锁 写锁

标签:版本号   适用于   资源   sam   http   写锁   钥匙   isa   线程   

原文地址:https://www.cnblogs.com/helios-fz/p/11022911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!