PHP зависает на операторе удаления MySQL - PullRequest
2 голосов
/ 18 августа 2011

Я пытаюсь удалить одну строку данных из базы данных MySQL (innodb) в сценарии PHP. Но вместо удаления скрипт PHP зависает на запросе. Это очень простой оператор удаления:

`mysqli_query($conn, 'delete from picture where idPicture = "'. $temp . '"');'

Если я выведу строку удаления и вставлю ее в окно запроса MySQL, оператор выполнится нормально. Отладка с помощью xdebug показывает мне то же самое, что и приведенный выше оператор удаления.

mysqli_error () дает мне вывод:

Превышено время ожидания блокировки; попробуйте перезапустить транзакцию

Если я пытаюсь закрыть соединение, после этого я получаю эту ошибку:

Предупреждение: mysqli_close () [function.mysqli-close]: не удалось получить mysqli в

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

Если бы кто-то мог объяснить, что я делаю неправильно, это было бы очень признательно.

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

Lock wait timeout exceeded; try restarting transaction Другими словами, таблица заблокирована и недоступна. Убедитесь, что другие сеансы MySQL не обращаются к этой таблице (например, могут зависать некоторые постоянные соединения).

COMMIT / ROLLBACK любые другие транзакции, которые имеют какое-либо отношение к этой таблице.

Попробуйте получить явный LOCK для удаления.

Подробнее здесь: http://dev.mysql.com/doc/refman/5.5/en/lock-tables-and-transactions.html

0 голосов
/ 18 августа 2011

У вас есть что-то, удерживающее одну или несколько блокировок на записях, которые вы пытаетесь удалить.Может быть активная транзакция.Вам нужно будет просмотреть список процессов, show innodb status и т. Д., Чтобы выяснить, какой это.Если это транзакция InnoDB, то в 'show innodb status' данные транзакции будут скрыты в середине вывода.

Самое быстрое решение - перезапустить mysql, который убьет все транзакции и блокировки, но затем вывозможно, в скором времени эта проблема снова возникнетВы должны выяснить, что получает этот замок, и почему он не освобождается.

...