有什么方法可以显式锁定表中的行吗?我有一些需要连续运行的应用程序逻辑,如下所示 (java):
Connection conn = ...;
try {
conn.setAutoCommit(false);
Game game = selectStatement(conn, gameId);
doLongRunningWorkOnGameObject(game);
updateStatement(conn, game);
conn.commit();
}
...
因此,如果多个用户大致同时进入此代码块,他们可能会在他们正在处理的游戏行中出现各种脏状态。在这种情况下,我想完全锁定该行,迫使其他用户等待(甚至阅读)。
有什么办法吗?
谢谢
最佳答案
在 MySQL 中,您可以使用 SET TRANSACTION。在每次游戏行更改之前设置事务,然后您就会在该行上获得独占锁。更新游戏行,然后提交事务以释放锁,然后转到下一个用户回合。像这样的东西:
updateStatement(conn, game) {
START TRANSACTION GAME_MOVE;
... code to do the move...
COMMIT TRANSACTION GAME_MOVE;
}
关于java - 在 MySQL 中锁定一行以防止脏读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34072800/