mysql的独占锁和共享锁

Posted 隐林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的独占锁和共享锁相关的知识,希望对你有一定的参考价值。

  当有多个事务同时更新一条sql时,mysql是如何处理的呢?很显然,使用加锁的方式,一个事务获得了锁,进行操作,其他事务排队一个个等着,等当前这个事务执行完释放锁,其他事务获取锁取到锁的进行操作。这里的锁就是独占锁,也就是X锁。

  那么如果有查询这一行数据时,是要加锁吗?不是的,mysql为了提高性能,读的时候使用mvcc机制,通过ReadView,查询undo log版本链,获取到自己能查询到的版本数据。读与更新同时进行,不互斥,性能就提高了。

  共享锁又是什么呢?mysql里叫共享锁为S锁,通 过手动执行select * from table lock in share mode来加共享锁。加了共享锁,还能加独占锁吗?不能的,共享锁和独占锁是互斥的。不过共享锁和共享锁不互斥,也就是加了一个共享锁,还可以再加另一个共享锁。

  独占锁 共享锁
独占锁 互斥 互斥
共享锁 互斥 不互斥

 

  但平时我们是很少去手动加共享锁的,一般更新时加独占锁就够了。 另外执行select * from table for update也会加独占锁。

以上是关于mysql的独占锁和共享锁的主要内容,如果未能解决你的问题,请参考以下文章

独占锁和共享锁有啥区别?

并发编程—独占锁和共享锁

MySQL中的读锁和写锁(InnoDb行锁表锁 MyISAM共享读锁 MyISAM独占写锁)

实现一个独占锁和3元共享锁及其思路

理解AbstractQueuedSynchronizer提供的独占锁和共享锁语义

Semaphore