php - 使用 PHP 锁定 MYSQL 表

标签 php mysql locking

我有 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/

相关文章:

PHP longblob 到 img

php - 如何使用PHP和MYSQL将mysql数据库中的垃圾字符与阿拉伯字母匹配

php - 如何在laravel中上传多张图片

php - fetch_array 内的 sqlsvr_fetch_array

mysql - 通过匹配表之间的字符串创建外键

javascript - 在多个 chrome.storage API 调用中防止竞争条件的最佳方法?

mysql - 如何正确错开数以千计的插入以免锁定表?

C# 如何检测一个对象是否已经被锁定

php - PHP 和 MySQL 中的嵌套列表

mysql - mysql 中的 COUNT 和 GROUP_CONCAT