php崩溃后mysql表被锁定

jwo*_*rin 2 php mysql crash innodb table-locking

我有一个MySQL数据库和一个innoDB表.我有一个连接的php页面,锁定表,进行一些更新,然后解锁表.PHP页面正在通过wamp提供apache.

php页面将文件上传到数据库.我决定通过上传一个大小比分配给PHP的内存大小的文件来模拟系统崩溃.这肯定导致了这个错误:允许18874368字节的内存大小耗尽(试图分配6176754字节).之后,更新期间锁定的表仍处于锁定状态.

我在尝试访问此错误后访问表时得到的错误是:表'a'未使用LOCK TABLES锁定.我知道这是一个锁定问题,因为我将调出一个SQL提示并尝试从已锁定的表中进行选择,它只是等待,就像锁定表时一样.如果我然后杀死Apache进程,我试图在SQL提示符中运行的语句将最终通过.我的猜测是,当我杀死Apache进程时,MySQL意识到应该释放表锁,因为连接被切断了.

有任何想法吗??

Rob*_*itt 6

来自:http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

如果客户端会话的连接终止,无论是正常还是异常,服务器都会隐式释放会话持有的所有表锁(事务性和非事务性).如果客户端重新连接,则锁将不再有效.此外,如果客户端具有活动事务,则服务器在断开连接时回滚事务,如果发生重新连接,则新会话将以启用自动提交开始.

由于您的连接在页面执行并完成/处理后仍然存在,因此连接仍然存在.

你不应该使连接持久IMO