我正在写一个在线游戏,有一个名为派遣部队。当一个账户中的两个或更多用户试图发送一个移动时,部队得到加倍。锁定innodb行,并获得一个真人版
我想从mysql获取一行的实时版本,并阻止任何读取,写入,更新该行上的任何内容,直到完成。
实际上可行吗?因为我只在innodb引用中选择更新并锁定共享模式。
任何帮助都是有效的。
我正在写一个在线游戏,有一个名为派遣部队。当一个账户中的两个或更多用户试图发送一个移动时,部队得到加倍。锁定innodb行,并获得一个真人版
我想从mysql获取一行的实时版本,并阻止任何读取,写入,更新该行上的任何内容,直到完成。
实际上可行吗?因为我只在innodb引用中选择更新并锁定共享模式。
任何帮助都是有效的。
BEGIN;
SELECT ... FROM t ... WHERE ... FOR UPDATE;
...
UPDATE t ...;
COMMIT;
其他人可以从t
读取行,但他们要么被延迟或陷入僵局,如果他们试图修改SELECT
所触及的行。
对于给定的行,您是否确实需要防止所有读取?请进一步解释你的情况。
请在下面找到MySQL的文件,以在InnoDB中锁定一个特定的行:
你会想要使用交易。 – ceejayoz
我正在使用mysqli进行交易。但它是否锁定了行,所以没有其他进程选择(读取)该行并等待? –
你可以在表格中显示标志栏来显示部队的部署状态。这样你就可以随时检查部队是否部署。即使用户在两个不同的设备上登录,您也可以处理这个问题 –