锁定读取
如果查询数据,然后在同一事务中插入或更新相关数据,则常规SELECT
语句不能提供足够的保护。其他事务可以更新或删除刚查询的相同行。 InnoDB
支持两种类型的 锁定读取,这些读取提供了额外的安全性:
-
在读取的任何行上设置共享模式锁定。其他会话可以读取行,但是在事务提交之前不能修改它们。如果这些行中的任何一个被尚未提交的另一个事务更改,则查询将等待直到该事务结束,然后使用最新值。
-
对于索引记录,搜索遇到的情况,锁定行和任何关联的索引条目,就像您
UPDATE
对这些行发出 语句一样。其他事务被阻止SELECT ... LOCK IN SHARE MODE
在某些事务隔离级别更新这些行,执行操作或读取数据。一致的读取将忽略读取视图中存在的记录上设置的任何锁定。(记录的旧版本无法锁定;可以通过在记录的内存副本上应用撤消日志来重构它们 。)
这些子句在处理单个表或跨多个表的树结构或图结构数据时最有用。您从一处到另一处遍历边缘或树枝,同时保留返回的权利并更改这些“ 指针 ”值中的任何一个 。
提交或回滚事务时,将释放 由LOCK IN SHARE MODE
和 设置的所有锁定FOR UPDATE
。</