2010-11-05 5 views
2

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

благодаря

ответ

1

Я бы заблокировать строку в явном виде с помощью:

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

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

+1

Также проверьте документы MySQL - http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html –

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