【问题标题】:PHP -MySQL insert and select statements - how to make them atomic?PHP -MySQL 插入和选择语句 - 如何使它们成为原子的?
【发布时间】:2011-10-22 01:12:30
【问题描述】:

我是 PHP 新手,我想知道如何克服这个看似简单的问题:

我有一个包含多个表的数据库。其中 1 个表称为“order_header”。订单头有一个名为“orderID”的字段,它是primaryKey并且是自动递增的。 OrderID 用于数据库中的其他表(food_table、drinks_table、merchant_info、customer_info 等),并且对于特定订单是唯一的。

现在我使用通常的 INSERT 语句将数据插入到 order_header 中,并且 order_header 生成一个新的 orderID。但现在我需要检索我刚刚创建的 orderID 并使用它将数据插入到该数据库的其他表中。

问题是如何在一种原子方法中同时插入数据和检索结果 orderID?我无法使用 mySQL 查询来获取最后一个 orderID,因为如果另一个线程同时在 orderID 中插入了一个条目。

我想在 Java 中可以使用锁和 @synchronized 这个词,但是在 PHP 中如何做到这一点?

【问题讨论】:

标签: php mysql insert atomic


【解决方案1】:

在查询后直接使用mysql_insert_id。它不会运行另一个查询来查找最后一个 ID

【讨论】:

  • 感谢您的回答 - 快速提问------但这是线程安全和原子的吗?什么是另一个线程在插入一条记录之后然后执行这条语句,那我不是得到错误的ID吗?
  • 是的 - 它返回当前连接上最后一个查询的结果,因为您在每个请求上调用 mysql_connect,每个“线程”都有不同的连接。
猜你喜欢
  • 1970-01-01
  • 2018-07-24
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
相关资源
最近更新 更多