Новый проект заставил меня заблокировать таблицу во время обработки обновлений. Я следил за каждым предложением и руководством, которое я могу найти, в том числе How to lock mysql tables in php и http://dev.mysql.com/doc/refman/5.1/en/innodb-locking-reads.html, но всегда получаю ту же ошибку: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «LIMIT 0, 30» по строке 1Результаты MySql «для обновления» Ошибка
Для того, чтобы пройти мимо всех возможных демонов в моей живой таблице, я создал новую таблицу на INNODB двигатель для тестирования, добавлен уникальный индекс, вставляется несколько строк, и используется следующий синтаксис для запроса:
SELECT svalue FROM `test` WHERE skey='key2' for update;
которая производит такую же ошибку. Удаление для обновления; из запроса позволяет выполнить запрос без ошибок.
Я не уверен, что я делаю неправильно, и попробовал все, что мог придумать. Пожалуйста, помогите мне понять, что мне не хватает!
Благодаря
Моя цель состоит в том, чтобы выбрать существующее значение из таблицы, затем увеличить и обновить при этом убедитесь, что другой процесс не прочитал старое значение до завершения обновления. Большинство моих исследований указывали на «Для обновления» для этого сценария, есть ли преимущество в использовании транзакций? – Jimmyb
@ foxns7: op действительно правильный, чтобы заблокировать строку. Параллельная транзакция может изменить ее. –