Elena Sharovar的答案是一种方法,但也许并不能完全解释所需要的.将要执行SELECT的每个进程都需要使用具有相同字符串的GET_LOCK.如果他们这样做,MySQL将自动等待(最多指定的秒数)返回结果,直到另一个线程释放锁定.
这是随着时间从上到下发生的事情:
THREAD 1 THREAD 2
DO GET_LOCK("table1.40912", 30)
SELECT * FROM table1 WHERE id=40912 DO GET_LOCK("table1.40912", 30)
[UPDATE query] [automatically waits]
[UPDATE query] [automatically waits]
DO RELEASE_LOCK("table1.40912") [lock finally obtained, query terminates]
SELECT * FROM table1 WHERE id=40912