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

Posted helios-fz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql:行锁 表锁 乐观锁 悲观锁 读锁 写锁相关的知识,希望对你有一定的参考价值。

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

技术图片

行锁

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

表锁

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

悲观锁

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

乐观锁

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

共享锁

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

 

以上是关于Mysql:行锁 表锁 乐观锁 悲观锁 读锁 写锁的主要内容,如果未能解决你的问题,请参考以下文章

mysql 之 乐观锁与悲观锁

MySQL中乐观锁和悲观锁 原理区别

MySQL锁机制

#yyds干货盘点#盘点MySQL的锁机制是如何实现的

乐观锁,悲观锁

乐观锁和悲观锁