我有 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'),为什么还要锁定整个表呢?您可能正在为相关表运行 MyISAM 存储引擎,您应该考虑使用 InnoDB引擎,因为它的强项之一是它支持行级锁定,因此您不需要锁定整个表。
关于php - 使用 PHP 锁定 MYSQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9188985/