Работа с проблемами параллелизма на уровне базы данных - PullRequest
2 голосов
/ 05 ноября 2010

Как бы вы поступили с одновременным доступом нескольких пользователей к записи в базе данных, особенно если у вас есть таблица резервирования инструмента и вы хотите запретить двум пользователям резервировать один и тот же инструмент, если они попытаются резервировать его в одно и то же время,Я думал, что установка уровня изоляции на сериализуемый должна делать это, но, как выясняется, уровень изоляции не делает этого, так как бы вы обнаружили параллельный доступ к записи и откатили любые изменения?Я использую JDBC с сервером MYSQL и движком InnoDB.

спасибо

1 Ответ

1 голос
/ 05 ноября 2010

Я бы заблокировал строку явно используя:

START TRANSACTION
SELECT ... FROM mytable WHERE id=? FOR UDPATE
...
COMMIT TRANSACTION

Между «выбрать для обновления» и фиксацией ни один другой сеанс не сможет выполнить «выбор для обновления» в этой строке. (Но другие сеансы смогут читать строку в ее старом состоянии, если ей не предшествует «выбрать для обновления», а другие сеансы смогут писать и «выбирать для обновления» другие строки и другие таблицы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...