【问题标题】:PHP hangs on MySQL delete statementPHP 挂在 MySQL 删除语句上
【发布时间】:2011-08-17 21:16:20
【问题描述】:

我试图在 PHP 脚本中从 MySQL 数据库 (innodb) 中删除一行数据。但是 PHP 脚本没有删除,而是挂在查询上。这是一个非常简单的删除语句:

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

如果我回显删除字符串并将其粘贴到 MySQL 查询窗口中,该语句将正常执行。使用 xdebug 进行调试显示我与上面的删除语句一样。

mysqli_error() 给我一个输出:

超过锁定等待超时;尝试重启事务

如果我尝试关闭连接,之后会出现以下错误:

警告:mysqli_close() [function.mysqli-close]:无法获取 mysqli

我想这很正常,因为连接超时。 我也对其他删除/选择语句使用相同的连接,它们都表现良好。

如果有人能解释我做错了什么,我将不胜感激。

【问题讨论】:

    标签: php mysql connection sql-delete


    【解决方案1】:

    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

    【讨论】:

    • 谢谢,我想我知道为什么它现在不起作用了!猜测它被其他一些不自动提交的语句锁定。修复它:)
    【解决方案2】:

    您尝试删除的记录上有一个或多个锁。可能是一个活跃的交易。您必须深入了解进程列表,show innodb status 等...才能确定它是哪一个。如果是 InnoDB 事务,“show innodb status”会将事务数据隐藏在输出中间。

    最快的解决方案是重新启动 mysql,这将杀死所有事务和锁,但是您可能很快就会再次遇到这个问题。您必须弄清楚是什么获得了该锁,以及为什么它没有被释放。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-01
      • 2010-12-31
      • 1970-01-01
      • 2013-04-02
      • 2011-10-31
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多