2015-12-03 4 views
1

Есть ли способ явно заблокировать строку в таблице? У меня есть некоторые приложения логики Мне нужно работать на строке, которая выглядит следующим образом (Java):Заблокировать строку в MySQL, чтобы предотвратить грязные чтения?

Connection conn = ...; 
try { 
    conn.setAutoCommit(false); 

    Game game = selectStatement(conn, gameId); 

    doLongRunningWorkOnGameObject(game); 

    updateStatement(conn, game); 

    conn.commit(); 
} 
... 

Так, если несколько пользователей войти в этот кодовый блок примерно в то же время, они могут иметь различные грязные состояния игры, в которой они работают. Я хотел бы заблокировать строку полностью, заставляя других пользователей ждать (даже прочитать ее) в этом случае.

Есть ли способ сделать это?

Thanks

+0

Что-то вроде этого? http://stackoverflow.com/questions/2395932/prevent-read-when-updating-the-table – miken32

ответ

0

В MySQL вы можете использовать SET TRANSACTION. Установите транзакцию до изменения каждой строки игры, после чего у вас есть исключительная блокировка строки. Обновите строку игры, затем зафиксируйте транзакцию, чтобы освободить блокировку, а затем перейдите к следующим пользователям. Что-то вроде:

updateStatement(conn, game) { 
    START TRANSACTION GAME_MOVE; 
    ... code to do the move... 
    COMMIT TRANSACTION GAME_MOVE; 
} 

MySQL SET TRANSACTION

Смежные вопросы