2013-03-17 1 views
0

Программа выберет несколько записей из таблицы и обновит каждую строку, в то время как она может выполняться много раз, что приведет к нескольким процессам, которые будут выполнять одну и ту же задачу одновременно.Как заблокировать строку для выбора в MySQL

Как предотвратить два разных процесса обновления одной и той же строки в таблице. То есть, как я могу обеспечить, чтобы каждый процесс мог выбирать разные записи? Существуют ли блокировки на уровне выбора строки в MySQL? Или в этой ситуации есть ли лучшее решение предотвратить многократное обновление одной строки?

+0

http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html? –

+0

ОПЕРАЦИИ, ИННОДБ искать эти два – swapnesh

+0

@swapnesh Я пробовал INNODB, транзакции. когда транзакция запуска процесса и «использование блокировки в режиме общего доступа» не помешают другому процессу получить одну и ту же строку, а просто заблокируют ее, чтобы не обновлять и удалять. –

ответ

0

Вы можете использовать SELECT FOR UPDATE. Внутри транзакции, начните выбирать те строки, которые вы хотите, чтобы «запереть», что-то вроде этого:

SELECT * from TABLE where id = 123 FOR UPDATE; 

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

+0

Спасибо. Может быть, я должен изменить логику своей программы, чтобы получить строку один за другим, а не сначала получить список, потому что я хочу, чтобы такая очередь могла обрабатываться несколькими процессами, а не одна с другими, ожидающими. –