1 SELECT...FOR UPDATE
锁的类型:读最新的可见数据,在每个它读取的行设置独占锁。
锁定范围:若SELECT的where条件中含有主键,则锁定搜索结果行;否则,锁定整个表。
排他性:多个独占锁不共存,也不可以与共享锁共存。故:SELECT...FOR UPDATE锁定的数据,在其他事务中无法通过 SELECT...FOR UPDATE 和 SELECT...LOCK IN SHARE MODE访问。
2 SELECT...LOCK IN SHARE MODE
锁的类型:读最新的可用数据,并设置一个共享锁。
锁定范围:若SELECT的where条件中含有主键,则锁定搜索结果行;否则,锁定整个表。
排他性:多个共享锁可以共存,不可以与独占锁共存。故:SELECT...LOCK IN SHARE MODE锁定的数据,可以被SELECT...IN SHARE MODE访问,但无法被SELECT...FOR UPDATE访问。
注:
(1) SELECT操作不受独占锁和共享锁的影响,因此SELECT操作可以访问SELECT...FOR UPDATE 和 SELECT...LOCK IN SHARE MODE锁定的数据。