php - 如何在php中锁定mysql表

标签 php mysql

如何在 php 中锁定 mysql 表?我目前有这段代码:

$db->query("LOCK TABLES tbl_othercharge WRITE");
for($x=0;$x<=500; $x++){
    $id = get_max();
    $db->query("INSERT INTO tbl_othercharge SET tblocID = '$id', assessmentID='lock1'");
}

$db->query("UNLOCK TABLES");

这里是 get_max() 函数,如果上面的脚本同时执行,显然会失败。

 <?php
    function get_max(){
        global $db;
        $max = $db->get_var("SELECT MAX(tblocNumber) FROM tbl_othercharge");
        if($max == null){
            $max = 1;
        }else if($max >= 1){
            $max = $max + 1;
        }
        return 'OC'.$max;
    }
    ?>

我正在尝试通过在 2 个浏览器上执行相同的脚本来测试是否仍然存在并发问题。 上面的脚本插入了 400 多条记录而不是 999 条记录。在向表中插入内容时如何正确锁定表。

我想锁定表以防止发生这样的事情: enter image description here

如您所见,前缀为“OC”的字段应该有一个等于自增主键的数字。

最佳答案

唯一可靠的解决方案是使用虚拟值进行插入,获取最后的插入 ID,并将行更新为正确的值。

mysql_query("INSERT INTO table (field) VALUES (dummy);");
$id = mysql_last_insert_id();
mysql_query("UPDATE table SET field='OC{$id}' WHERE id={$id} LIMIT 1;");

关于php - 如何在php中锁定mysql表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8576125/

相关文章:

mysql - 查询未显示我需要的所有结果

php - 在 Javascript 中使用 PHP 中的数组值

php - 如何计算从当前系统日期到过去和 future 日期的 365 天,并使用 php 和 mysql 相应地获取数据

php - 我正在使用 Chrome,无法使用 php 从 mysql 获取图像显示

android - 应用程序在没有网络连接的情况下意外关闭

php和mysql foreach只显示第一条记录四次

php - 我可以关闭未命名的 mysql 连接吗?

php - 检查 WooCommerce 中 Hook 功能破坏网站上的用户角色

php - 使用PHP MySQL创建工作时间表

php - MySQL 查询其中 x = 任何内容