我在 MySql
中有一个用户表结构:
ID - big int
文字 - Varchar
Verified = false(默认情况下)
默认情况下为Thread = false /当线程与当前行一起使用时设置为true。
工作流
问题是我有5个或更多线程。在第2步结束之前,其他线程获得相同的行。从90个线程,最多40%可以在同一行工作。在请求之前添加随机时间并没有多大帮助。
我的问题是:如何临时锁定行,以防止被其他线程读取?
答案 0 :(得分:1)
您可以对InnoDB记录应用独占锁定:
SELECT * FROM table WHERE id = 666 FOR UPDATE;
因此,其他用户/线程无法读取您锁定的这些记录。
由于锁定将在事务结束时自动释放。因此,您通常需要通过START TRANSACTION
或BEGIN
启动交易,并将上述语句放入此交易中。