我正在尝试从PHP脚本中的MySQL数据库(innodb)中删除一行数据。但是,PHP脚本不是删除,而是挂起查询。这是一个非常简单的删除声明:
`mysqli_query($conn, 'delete from picture where idPicture = "'. $temp . '"');'
如果我回显删除字符串并将其粘贴到MySQL查询窗口中,则该语句将正常执行。使用xdebug进行调试显示了与上述删除语句相同的内容。
mysqli_error()给出了一个输出:
超过锁定等待超时;尝试重新启动交易
如果我尝试关闭连接,之后我收到此错误:
警告:mysqli_close()[function.mysqli-close]:无法在
中获取mysqli
我猜这是正常的,因为连接超时了。 我也对其他删除/选择语句使用相同的连接,它们都表现良好。
如果有人能够解释我做错了什么,那将非常感激。
答案 0 :(得分:4)
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
答案 1 :(得分:0)
你有一些东西在你想要删除的记录上持有一个或多个锁。可能是一个活跃的交易。您将不得不深入了解进程列表show innodb status
等等,以确定它是哪一个。如果是InnoDB事务,'show innodb status'将把事务数据隐藏在输出的中间。
最快的解决方案是重新启动mysql,它会终止所有事务和锁定,但是你可能会在短时间内再次遇到这个问题。你必须弄清楚这个锁是什么,以及为什么它没有被释放。