2017-06-12 48 views
0

我正在写一个在线游戏,有一个名为派遣部队。当一个账户中的两个或更多用户试图发送一个移动时,部队得到加倍。锁定innodb行,并获得一个真人版

我想从mysql获取一行的实时版本,并阻止任何读取,写入,更新该行上的任何内容,直到完成。

实际上可行吗?因为我只在innodb引用中选择更新并锁定共享模式。

任何帮助都是有效的。

+0

你会想要使用交易。 – ceejayoz

+0

我正在使用mysqli进行交易。但它是否锁定了行,所以没有其他进程选择(读取)该行并等待? –

+0

你可以在表格中显示标志栏来显示部队的部署状态。这样你就可以随时检查部队是否部署。即使用户在两个不同的设备上登录,您也可以处理这个问题 –

回答

0
BEGIN; 
SELECT ... FROM t ... WHERE ... FOR UPDATE; 
... 
UPDATE t ...; 
COMMIT; 

其他人可以从t读取行,但他们要么被延迟或陷入僵局,如果他们试图修改SELECT所触及的行。

对于给定的行,您是否确实需要防止所有读取?请进一步解释你的情况。