如何在 php 中锁定 mysql 表

2023-12-24

如何在 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;
    }
    ?>

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

I want to lock the table to prevent something like this to happen: 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;");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 php 中锁定 mysql 表 的相关文章

随机推荐

  • sleep 0 在 shell 脚本中做什么?如果在 ansible SSH 配置中使用它在每个命令后附加它会做什么?

    什么是sleep 0在 shell 脚本中做什么 我阅读了 sleep 的手册页 它说 延迟指定的时间 参数 NUMBER 以秒为单位指定这个时间 默认情况下 但我看到 ansible 使用sh c echo ec2 user sleep
  • VSCODE 中的 YAML 文件格式

    我刚刚开始使用 VSCODE 每次在现有 YML 文件中粘贴 YAML 代码时都会遇到麻烦 基本上 编辑器似乎会自动格式化文档 这样做会弄乱文档中的重要空间 这会导致 Azure Devops 中的构建中断 尽管 VS code 可以很好地
  • 发送在我的 NDIS 修改过滤器驱动程序中无法正常工作

    我正在尝试使用 NDIS 来实现数据包修改过滤器 我使用了丢弃数据包并从克隆 NBL 发起发送 接收的方法 msdn 上的文档说这是允许的 https learn microsoft com en us windows hardware d
  • Leaflet/shiny:无法绘制反应多边形

    看完了Leaflet for R 页面上的闪亮集成示例 https rstudio github io leaflet shiny html 我在子集化和显示一些多边形以在我闪亮的应用程序中显示时遇到问题 目前 我正在得到一个带有侧边栏的应
  • phantomjs 没有关闭并留下孤立进程

    在 PhantomJS 1 9 2 ubuntu 12 LTS 和 Ghostdirver 1 04 以及 selenium 2 35 上 测试后我得到了悬空的 phantomjs 进程 有人知道如何解决这个问题的好方法吗 这是一个演示奇怪
  • 使express.js 中单个用户的所有会话失效

    出于安全原因 我们希望能够使用户的所有活动会话无效 例如 如果他们更改密码 或者只是希望能够强制注销其他会话 我们使用 Node js Express express sessions 和 Redis 会话存储 在我们的应用程序中 我们有
  • 除非修改源代码,否则 Three.js 骨骼动画无法工作

    使用 Three js r68 我需要对源代码进行轻微修改才能使我的动画正常工作 未经修改 每种类型的模型中只有一个是动画的 每种类型的模型都有多个生成 这是第 29407 行的修改后的源代码 从 29389 开始发布的代码 THREE A
  • 使用 2.x API 的 Android 应用程序也可以在 1.x 上运行

    我正在开发一个 Android 应用程序 我想在其中使用多点触控 然而 我不想完全忽略那些仍在运行 1 x 操作系统的手机 如何对应用程序进行编程 以便可以使用 2 x 多点触控 API 或与此相关的任何其他更高级别的 API 并且仍然允许
  • d3js 中矩形的大小基于值的总和而不是项目的计数

    我正在开发 d3js 可视化 我想根据大小显示组和子组 除了矩形的大小之外 大部分功能都可以工作 如果您在加载时看到所有四个盒子尺寸都相同 因为它们都有相同的编号 补助金计划 我想根据 grant award 更改这些矩形的大小 这是我在以
  • 在Sage中使用Python的pickle会导致内存使用率很高

    我正在使用基于 Python 的 Sage Mathematics 软件来创建一个很长的向量列表 该列表包含大约 100 000 000 个元素 sys getsizeof 告诉我它的大小略小于 1GB 我将这个列表放入一个文件中 这已经花
  • SharePoint CSOM,检索网站集。限量300个?

    我正在尝试从 SharePoint Online 域检索网站集列表 我正在使用 C 和客户端对象模型 以下代码仅返回 300 个网站集 var tenant new Tenant ctx spp tenant GetSiteProperti
  • 嵌入式 Jetty - Spring MVC - 视图解析器 - 无 XML - HTTP 错误:404

    我正在尝试使用嵌入式 Jetty 设置一个简单的 Spring MVC 服务器 我已经设置了服务器 启用了 spring 并为 jsp 文件配置了视图解析器 控制器给我 404 并显示以下消息 Problem accessing jsp t
  • ORA 删除/截断

    我正在使用 SQL 加载器将数据加载到数据库中 在插入数据之前 我需要删除表中的现有数据 options skip 1 load 250000 errors 0 ROWS 30000 BINDSIZE 10485760 load data
  • 使用android的加速度计移动图像

    我已阅读有关访问手机加速度计 加速度和方向 值的文章 教程 我正在尝试构建一个简单的应用程序 我可以使用这些值移动球图像 这是我的代码 import android app Activity import android content C
  • 如何以编程方式向 Android 手机的扬声器发出短促的蜂鸣声

    为了在扬声器上接收唯一的短蜂鸣声 我想直接向扬声器发送单个比特 与 LED 闪烁类似 是否有可能在没有任何媒体播放器的情况下发出短促的蜂鸣声 我建议您使用ToneGenerator https developer android com r
  • Numpy:如何将矩阵随机拆分/选择为 n 个不同的矩阵

    我有一个形状为 4601 58 的 numpy 矩阵 我想根据行数按 60 20 20 分割随机分割矩阵 这是我需要的机器学习任务 有没有随机选择行的 numpy 函数 你可以使用 numpy random shuffle import n
  • 如何使用 UIPanGestureRecognizer 捕获正在平移的方向?

    好吧 我一直在寻找几乎所有捕捉多点触摸手势的选项 最后我又回到了 UIPanGestureRecognizer 我想要的功能其实很简单 我设置了一个两指平移手势 并且我希望能够根据我移动的像素数来随机浏览一些图像 我已经解决了所有问题 但我
  • Python中的多元正态密度?

    是否有任何 python 包可以有效计算 PDF 概率密度函数 多元正态分布 https en wikipedia org wiki Multivariate normal distribution 它似乎没有包含在 Numpy Scipy
  • 在 pyparsing 期间更改字符串

    在我的 pyparsing 代码中 我有以下表达式 exp1 Literal foo Suppress Literal Word alphanums exp2 Literal foo Suppress Literal Word alphan
  • 如何在 php 中锁定 mysql 表

    如何在 php 中锁定 mysql 表 我目前有这个代码 db gt query LOCK TABLES tbl othercharge WRITE for x 0 x lt 500 x id get max db gt query INS