我想在MySQL (InnoDB)中锁定一个特定的行,这样特定的行就不能被另一个连接读取。
start transaction;
Select apples from fruit where apples = 'golden';
commit;现在我想申请一个独占锁
独占锁一种防止任何其他事务锁定同一行的锁。
https://dev.mysql.com/doc/refman/5.5/en/innodb-locking.html#innodb-shared-exclusive-locks
我假设锁get已被应用,那么试图访问同一行的第二个连接必须等待第一个连接以"commit;“释放锁;
我的问题是,如何调整SQL语句以应用该锁?或者这是在开始事务中自动发生的吗?
我一直想找个好例子,但没有。
发布于 2017-10-19 02:10:26
START TRANSACTION;
Select apples
from fruit
where apples = 'golden'
FOR UPDATE;
...
COMMIT;SELECT ... FOR UPDATE语句首先锁定行,然后将其返回给您。
任何试图在同一时间对同一行执行相同操作的人都将等待您的COMMIT或ROLLBACK,然后他们将收到该行.你所做的任何改变。
如果您不打算更改行,您只想确保没有其他人可以更改,那么您可以SELECT ... LOCK IN SHARE MODE。
注意,无论哪种方法,从技术上讲,它不是被锁定的“行”,实际上是被锁定的索引记录,但是在InnoDB中,“一切都是索引”(即使没有索引的表实际上仍然有一个索引,由系统很好地创建),所以最终结果是相同的。
https://stackoverflow.com/questions/46812431
复制相似问题