使用PHP锁定MYSQL表

我有mysql表fg_stock.大多数情况下,此表中发生了并发访问.我使用了这段代码,但它不起作用:

<?php
    mysql_query("LOCK TABLES fg_stock READ");

    $select=mysql_query("SELECT stock FROM fg_stock WHERE Item='$item'");

    while($res=mysql_fetch_array($select))
    {
        $stock=$res['stock'];
        $close_stock=$stock+$qty_in;
        $update=mysql_query("UPDATE  fg_stock SET stock='$close_stock' WHERE Item='$item' LIMIT 1");
    }

    mysql_query("UNLOCK TABLES");    
?>

这个可以吗?

解决方法:

“大多数时候并发访问都发生在这个表中”

那么,为什么在显示您正试图从表中访问特定行(WHERE Item =’$item’)时,您想要锁定ENTIRE表?您可能正在为相关表运行MyISAM存储引擎,您应该考虑使用InnoDB引擎,因为它的一个优点是它支持行级锁定,因此您不需要锁定整个表.

上一篇:mysql – 如何在复制该表时锁定InnoDB表以防止更新?


下一篇:对象锁定私有类成员 – 最佳实践? (JAVA)