mysql_last_id() 的竞争条件

2024-01-05

我花了一天的大部分时间试图找到这个问题的答案,但似乎没有答案。我需要一个函数,它在表中创建一行,从插入的行中检索自动增量,然后使用该值在第二个表中插入另一行。功能上类似于以下 php:

$mysql_query("INSERT INTO table1 SET columns='values'");
$id = mysql_insert_id();
$mysql_query("INSERT INTO table2 SET id='$id', columns='values'");

我遇到的问题是,在我的应用程序中,所有类之间共享一个 MySQL 连接,所以我担心这可能会导致竞争条件,其中另一个类在运行第一行和第二行之间插入一行上述的。

我能想到的最简单的解决方案是使用任何函数mysql_insert_id()打开一个新的、独特的连接,但这似乎是大量不必要的开销。我尝试过的其他答案包括插入一个唯一的值(可能是用UUID())并使用它而不是自动递增值,或者可能将第一个插入和调用LAST_INSERT_ID()在存储函数中(尽管我不确定这是否可以解决可能的竞争条件)。

我也一直在研究交易,看看它们是否有帮助,但几乎找不到关于具体如何帮助的文档mysql_insert_id()与他们互动。据我所知,他们可能不会在这里提供帮助,因为另一个INSERT与任何事务的锁不冲突的事务仍然能够执行,并可能导致相同的竞争条件。

因此,假设我对上述任何一条都没有错误(如果错误,请纠正我),那么确保第二个 100% 的最佳方法是什么?INSERT使用正确的值?


php脚本的执行是线性的,而不是多线程的。
因此,当一个对象与另一个对象同时执行时,不可能有一个条件

唯一可能的问题是持续连接。但无论如何,同一个连接似乎不能被 2 个单独的调用使用。即使它是持久性的,如果它已经在使用中,它就不能被另一个脚本使用。这样,也不会有任何问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql_last_id() 的竞争条件 的相关文章

  • 导出具有高质量图像的画布的最佳实践是什么?

    我需要你的帮助 我解释一下我的情况 我正在使用 Fabric js 库在我的应用程序中放置形状 文本等 我的画布尺寸为 1000x1000 像素 约 26 45x26 45 厘米 我有一个图像上传脚本 仅用于上传高质量图像 例如 300 d
  • 当向数据库表添加一列时,如何让 datagridview 显示更改?

    我在 Visual Studio 的项目中创建了一个数据集 该数据集指向我的数据库中的一个表 然后将 datagridview 控件绑定到它 现在我打开数据库并向数据库中的表添加另一列 然后我打开数据集并更新其配置以包含更改 然后我想更新
  • 高级自定义字段 - WordPress

    在使用时自定义字段插件 我无法让它返回任何数据 我创建了一个名为的字段组book cover thumbnail其中有一篇文章链接到它 谁能明白为什么下面的代码不起作用 img src 我完全没有收到任何错误 没有空格 确保您 a 使用以下
  • 如何延长SQL查询的超时时间

    这不是连接超时 因为与数据库的连接正常 问题是我调用的存储过程花费的时间超过 30 秒 并导致超时 该函数的代码如下所示 SqlDatabase db new SqlDatabase connectionManager SqlConnect
  • MySQL Workbench 深色主题

    我刚刚开始学习 SQL 课程 并且一直在尝试不同的 GUI 我喜欢使用 MySQL Workbench 但白色背景刺瞎了我的眼睛 我已经搜索并找到了一些其他讨论编辑 xml 文件的相关帖子 我尝试用几种不同的方式对其进行编辑 但无济于事 我
  • Laravel Eloquent 多对多查询 whereIn

    在我的应用程序中 我更新了关系one to many to many to many我正在尝试找出一种方法来保留相关功能 假设我有两个相关的表 例如狗和主人 如果我有很多主人 并且我想获取这些主人的狗 ID 列表 我应该如何雄辩地做到这一点
  • 为什么 array_merge_recursive 不是递归的?

    我最近在我的应用程序中发现了一个由意外行为引起的错误array merge recursive 让我们看一下这个简单的例子 array1 1 gt 1 gt 100 2 gt 200 2 gt 3 gt 1000 3 gt 1 gt 500
  • rewrite_mod 已启用,但 .htaccess 不起作用

    我在 Amazon EC2 的 ubuntu 12 04 中使用 apache 2 2 我使用启用了 mod rewrite sudo a2enmod rewrite 并能够看到 apache2ctl M 现在我编写了以下 htaccess
  • 每 n 个字符后插入连字符,末尾不添加连字符

    我在用着chunk split 每第四个字母后添加一个 但它也会在字符串末尾添加一个 这是我不想要的 代码如下 function GenerateKey input generated strtoupper md5 input uniqid
  • Doctrine QueryBuilder 重用部件

    我想计算所有符合我的条件的字段 并使用学说查询生成器逐页获取它们 我生成的查询取决于我的过滤器字段 第一部分是计算记录 以便我可以计算页数 qb em gt createQueryBuilder qb gt select COUNT m i
  • empty() 在对象的非空属性上返回 TRUE

    我遇到了一个非常奇怪且意想不到的问题 empty 正在返回TRUE由于我不知道的原因 在一处非空的房产上 class MyObject private property public function construct property
  • Laravel Eloquent with()-> 返回 null

    我正在尝试使用 Eloquent 来获取具有以下功能的特定产品 brand id映射到a的列brands表 该brand数组返回空 这里有什么明显需要改变的地方吗 product Product with images gt with br
  • SQL Server 查看主键

    有没有办法在 sql server 中为视图提供主键 我知道在oracle中这是可能的 我不关心更新它的只读视图 但其他人正在 ms access 中使用它 所以我希望显示我知道正确的约束 是的 您可以创建一个索引视图 http msdn
  • 如何增加每次 INSERT INTO 迭代的值?

    我有一个查询 如下所示 第 1 列位于 另一列是 varchar 100 INSERT INTO TABLE1 column1 column2 SELECT MAX column1 FROM TABLE1 1 anotherColumn F
  • 使用 htaccess 文件重定向[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Edit 我想重定向一个网址 to www example com location sydney from www example com rss
  • Elastic Beanstalk 上的 Django + MySQL - 查询 MySQL 时出错

    当我在 Elastic beanstalk 上托管的 Django 应用程序上查询 MySQL 时 出现错误 错误说 admin login 处出现操作错误 1045 用户 adminDB 172 30 23 5 的访问被拒绝 使用密码 Y
  • SQL 选择另一列中具有最大值的列

    我有一个看起来像这样的表 Name Group Value A 1 0 B 1 2 C 1 5 D 2 6 E 2 0 F 3 3 我想选择每组中具有最大值的名称 例如 有 3 个组 因此结果将是 Name C because it has
  • 将文件附加到 PHPMailer

    我目前正在开发一个项目 该项目将文件作为 blob 存储在数据库中 我需要将文件附加到电子邮件并通过 PHPMailer 发送出去 我熟悉 mail gt addAttachment 但是 这个函数似乎只接受文件路径 而我没有 我想知道是否
  • File_get_contents($url): 无法打开流

    我有一个脚本 我使用以下方法读取文件 file get contents urlencode url 我收到此错误 failed to open stream HTTP request failed HTTP 1 0 400 Bad req
  • 每组最大 n 个 SQL 查询的高性能方法

    我正在尝试构建一个基础设施 以便根据需要快速运行回归 从包含我们网络服务器上所有历史活动的数据库中提取 apache 请求 为了通过确保我们仍然回归来自较小客户的请求来提高覆盖范围 我想通过为每个客户检索最多 n 个 为了这个问题 假设 1

随机推荐

  • 使用scala获取包中的所有类名

    我有一个包裹 package one two three 在那个包裹里我有 public trait first public class Second and pubic class Third 我想将所有类和接口 一 二 三 名称获取为
  • 如何将 CSV 文件中的批量数据导入到 DynamoDB 中?

    我正在尝试将 CSV 文件数据导入 AWS DynamoDB 我的 CSV 文件如下所示 first name last name sri ram Rahul Dravid JetPay Underwriter Anil Kumar Gur
  • 如何在非托管c++ dll中查找调用者程序集名称

    我有一个非托管 c dll 我正在从 c net 3 5 调用此非托管 dll 的外部方法 我正在寻找一种方法来找到女巫 c 程序集正在调用我的非托管 c dll 进入我的 c dll 至少是程序集的名称 当然 我不想将任何附加参数传递给方
  • 显示虚拟环境

    当我在 virtualenv 中并且它处于活动状态时 环境名称将显示在正常命令行提示符之前的括号中 看起来像 foo env User Development foo env foo where foo env是环境的名称 我想知道是否有办
  • T-SQL:在 UPDATE 语句中使用 CASE 根据条件更新某些列

    我想知道这是否可能 如果条件为真 我想更新列 x 否则将更新列 y UPDATE table SET CASE CONDITION WHEN TRUE THEN columnx ELSE columny END 25 我到处搜索 尝试了一些
  • 在 .Net 中使用 GraphQL 客户端库实施 AWS Appsync

    我正在尝试实现类似于此 python 示例但在 net 中的应用程序同步订阅https aws amazon com blogs mobile appsync websockets python https aws amazon com b
  • 在 asp.net mvc 中实现“不跟踪”

    如何实现不跟踪来自 asp net mvc3 的浏览器同意 如果用户设置了不跟踪浏览器中启用的设置 所有主要浏览器 例如 IE Firefox 和 Chrome 是否都会发送一些 cookie 同意请求 Do Not Track 仅意味着浏
  • 如何设置根视图控制器

    我设置了一个仅包含应用程序委托类的空应用程序 然后对视图控制器类进行子类化以创建 xib 来布局应用程序并建立连接 但是当我尝试在 iOS 模拟器上运行该应用程序时 出现错误 CoinToss 6212 f803 应用程序预计在应用程序启动
  • std::set of MyElement 与 MyElement::SomeMethod 作为自定义比较器

    我有一个简单的MyElement类 我想使用bool MyElement SomeMethod 作为自定义比较器std set of MyElement items 我已经进行了研究 并且已经知道一些替代解决方案 我在下面列出了这些解决方案
  • 如何检查 DataView.RowFilter 中的空白

    假设我有一个名为 A 的列 并且我想检查 A 是否为空或空白 那么使用 DataView 的 RowFilter 进行检查的正确方法是什么 DataTable dt GetData DataView dv new DataView dt d
  • 前向声明/何时最好包含标头? [复制]

    这个问题在这里已经有答案了 我很清楚何时可以 不能使用前向声明 但我仍然不确定一件事 假设我知道我迟早必须包含一个标头才能取消引用 A 类的对象 我不清楚做类似的事情是否更有效 class A class B A a void DoSome
  • Dialogflow Webhook 响应未发送到 Twilio - Twilio 调试器上出现 14103 Invalid Body 错误

    我正在实现一个通过 Twilio 与 WhatsApp 集成的聊天机器人 该机器人使用 V2 API 我已经在 Google 云上实现了集成 因为它们将被关闭 当我从 WhatsApp 触发机器人时 会触发正确的意图并执行正确的功能 但当我
  • 如何在 UserControl Paint 事件中对点进行动画处理?

    在绘画事件中 因为我希望能够控制点大小颜色和更多属性 using System ComponentModel using System Drawing using System Drawing Drawing2D public partia
  • 在 watir-webdriver 中将 select_list 选项转换为字符串数组?

    我需要检查选择列表下拉列表的内容 该列表根据另一个字段中的值而变化 我正在将有效选项从 CVS 字段读取到字符串数组中 并通过执行以下操作进行比较 selectContent browser select list id srch stat
  • 尝试学习 boost::intrusive Q2

    如果我取消注释这些 BaseList baselist MemberList memberlist 在循环外部并注释掉循环内部的循环 它会崩溃 我需要能够将基本列表 和成员列表 放在任何循环之外 这是如何实现的 Edit 我试图以最简单的形
  • CURL 和 HTTPS,“无法解析主机”

    我正在尝试使用 CURL 获取页面的内容 正在执行获取的页面是 https 它尝试获取的页面也是 https 我尝试的所有设置都收到错误 无法解析主机 c curl init curl setopt c CURLOPT URL url cu
  • Unity 解决方案与 Visual Studio 不兼容

    自从更新到最新版本的 Unity 5 4 0f3 以来 每当我双击脚本时 它都会启动 Visual Studio 和 Monodevelop 但我收到一条错误消息 指出此版本的 VS Community 2015 无法打开我的项目 Mono
  • 该进程无法访问该文件,因为该文件正在被另一个进程使用(文件已创建但不包含任何内容)

    using System IO class test public static void Main string path c mytext txt if File Exists path File Delete path FileStr
  • 生成总和为预定义值的随机数

    所以事情是这样的 我想 例如 生成 4 个伪随机数 加在一起等于 40 这怎么可能是 python 中的圆顶 我可以生成一个随机数 1 40 然后生成 1 和余数之间的另一个数字 等等 但是第一个数字将有更大的机会 抓住 更多 这是标准解决
  • mysql_last_id() 的竞争条件

    我花了一天的大部分时间试图找到这个问题的答案 但似乎没有答案 我需要一个函数 它在表中创建一行 从插入的行中检索自动增量 然后使用该值在第二个表中插入另一行 功能上类似于以下 php mysql query INSERT INTO tabl