网络很多对共享锁的错误理解,为什么?

如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。

上面的话有毛病,来自:https://www.cnblogs.com/nickup/p/9804020.html

一个事务对某行数据加共享锁,其它事务可以读取但是不能修改,这没有毛病。但是一个事务已经加了共享锁,其它事务怎么能继续往上面加锁呢?上面说可以加共享锁,不能加排他锁,这样的表述不对吧。

我们说对数据加锁,那就是锁上了,怎么允许其它事务继续再加一把锁上去呢?

共享锁,其实就是一个事务对数据加了锁,但是钥匙有多把,其它使用可以获取这把锁的钥匙进去看,但是不能改动罢了,这不叫加锁吧。

回答

MySQL锁机制:
表级锁:
隐式读/写表级锁
显式读/写表级锁
行级锁(InnoDB):只有通过索引条件检索的数据,InnoDB才会使用行级锁
隐式行级锁
显式行级锁:
SELECT 语句 FOR UPDATE(行级排他锁) | LOCK IN SHARE MODE(行级共享锁)
表的意向锁(共享、排他)!!在 加行级锁 前,和 表级锁(共享、排他两种)对比是否 兼容!!

from 书《MySQL数据库原理、设计与应用》by 黑马程序员

以上是网络很多对共享锁的错误理解,为什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>