|
|
|
| Здравствуйте!
Мне не понятно как работает конструкция SELECT ... FOR UPDATE
Что именно блокирует FOR UPDATE, до которого момента и для кого. | |
|
|
|
|
|
|
|
для: Lenny
(20.04.2012 в 13:58)
| | Это для транзакций, т.е. если вы внутри транзакции выполняете SELECT-запрос с данными ключевыми словами, то, изменение запрашиваемых слов будет заблокировано до тех пор, пока не завершиться транзакция. Работает только с InnoDB. | |
|
|
|
|
|
|
|
для: cheops
(20.04.2012 в 14:59)
| | Я так понимаю что блокируется для всех соединений? Если SELECT ... FOR UPDATE из несколько таблиц, все таблицы будут заблокированы?
Спасибо | |
|
|
|
|
|
|
|
для: Lenny
(20.04.2012 в 15:12)
| | в innoBD блокировка на уровне строк, в данном случае тех которые попадут в выборку SELECT | |
|
|
|
|
|
|
|
для: Lenny
(20.04.2012 в 15:12)
| | Да, для всех соединений, ну и следует иметь в виду то, что сказал Valick - это строго InnoDB, больше адекватных таблиц с блокировкой на уровне отдельных строк в MySQL нет (официально по-крайней мере). | |
|
|
|
|
|
|
|
для: Lenny
(20.04.2012 в 15:12)
| | Спасибо за ответы.
Еще вопрос
А Существует ли аналогичная блокировка на чтения строки, пока первый не отработал транзакцию? | |
|
|
|
|
|
|
|
для: Lenny
(20.04.2012 в 19:11)
| | А в смысле первый? | |
|
|
|
|
|
|
|
для: cheops
(20.04.2012 в 21:23)
| | В смысле чтоб другое соидинения не смогло прочитать строку, так как оно может изменится в результатах транзакции. | |
|
|
|
|
|
|
|
для: Lenny
(21.04.2012 в 19:05)
| | Это уже уровень изоляции транзакций... т.е. делать это нужно не через SELECT-запросы, а через сами транзакции (там довольно строгие уровни, правда не все СУБД поддерживают все уровни и не все СУБД позволяют их настраивать, но у MySQL в этом плане вроде все четко). | |
|
|
|