我有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引擎,因为它的一个优点是它支持行级锁定,因此您不需要锁定整个表.