Задавайте вопросы, мы ответим
Вы не зашли.
Насколько я понимаю ключ NOWAIT не поддерживается в mysql:
SELECT * FROM tab1 WHERE col1 = 1 FOR UPDATE NOWAIT;
Соответственно запрос SELECT * FROM tab1 WHERE col1 = 1 FOR UPDATE; когда запись уже заблокирована приводит к ожиданию завершения блокировки.
Вопрос: как наименьшими усилиями избежать ожиданий и узнать что запись заблокирована?
Неактивен
Насколько я понимаю, для Вас будет проще всего сделать что-то типа
SET table_lock_wait_timeout=0;
LOCK TABLES tab1 WRITE; (и тут проверить ошибку)
...
UNLOCK TABLES;
Неактивен
paulus написал:
Насколько я понимаю, для Вас будет проще всего сделать что-то типа
SET table_lock_wait_timeout=0;
LOCK TABLES tab1 WRITE; (и тут проверить ошибку)
...
UNLOCK TABLES;
Спасибо, но к сожалению блокировка всей таблицы не приемлема.
Неактивен
Т.е. Вы используете InnoDB и блокировки по строкам. Как насчет
SET innodb_lock_wait_timeout = 0;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT * FROM tab1 WHERE col1 = 1; (проверка ошибки)
Неактивен
innodb_lock_wait_timeout нам не поможет, это таймаут для сброса дедлоков возникающих когда таблица блокируется не с помощью Innodb
К тому же innodb_lock_wait_timeout - readOnly
Или я что-то не понимаю?
Неактивен
Упс, действительно, ставится только через перезапуск сервера
Боюсь тогда залочить никак не сможете. С другой стороны, Вам действительно
нужно лочить строчки? Обычными уровнями изоляции не обойдетесь?
Неактивен