在同一个事务中,如果你先查询数据,随后对相关数据进行插入或修改,那么在标准的SLELECT中不会给出足够的保护。在你查询期间另一个事务可以更新或者删除相同的行。InnoDB提供两种类型的加锁读:
SELECT ... LOCK IN SHARE MODE给读到的每一行都加共享锁。其它的会话也可以读到这些行,但是它们不能修改这些行,直到你的事务提交。如果这些行被其它事务修改了但尚未提交,你的 查询必须等待直到那个事务结束。
SELECT ... FOR UPDATE对于检索到的没一个索引记录,锁定这些行和与之关联的索引记录
其实,前者是加意向共享锁,后者加意向排它锁。
如对本文有疑问, 点击进行留言回复!!
荐 Mysql2020最新教程(高级部分)之存储引擎与简单的sql优化
大型互联网必问的MySQL面试题:MySQL存储与索引+事务和锁+性能优
网友评论