gpt4 book ai didi

mysql - 根据主表主键值向子表插入数据

转载 作者:行者123 更新时间:2023-11-29 14:28:19 25 4
gpt4 key购买 nike

我目前正在一家电子商务购物网站工作。用户可以随时随地提交订单,这一点就不用多说了。

我在MySql数据库中有两个表orderorder_details(还有其他表)来维护我们可以轻松想象的订单详细信息,因此我认为,我需要没有描述两个表的整体结构。

order 表基本上包含诸如 order_id(自动递增主键)、order_dateorder_status 等字段> 以及其他一些我们在这种情况下不需要的内容。

order_details 表基本上包含 order_id 等字段,它是 order 表的外键产品名称产品价格

当客户提交订单时,要进行的第一个条目位于order表中,并根据该表中的order_id,该订单的详细信息订单被插入到 order_details 表中。

插入到order_details表中需要从order表中获取适当的order_id(该表是自动递增的,因此,我们不能提前拥有)。我目前正在从 order 表中获取此 order_id,如下所示。

select max(order_id) from order;

此 SQL 语句为我提供了 order 表中最新的 order_id,并使用该值,我可以将特定订单的详细信息插入 order_details 表。

现在,假设我当前提交的订单包含购物车中的一些产品。我的订单已成功插入 order 表,但在插入 order_details 之前(以及在检索 ma​​x order_id 之前)来自 order 表),由于某种原因,该进程被服务器上的操作系统调度程序切换到执行另一个客户的订单,并且该另一个客户的订单的处理已完全完成(插入到两个订单中)表、orderorder_details)。

完成此订单处理(另一个客户的订单)后,我的订单(仍处于待处理状态)开始执行,该订单在从 检索 ma​​x order_id 之前被切换掉>订单表。当执行上述 SQL 语句时,它将从 order 表中获取与另一个客户的订单相关的 max order_id 以及 与我的无关,导致交易处于不一致状态!

我想问的是,如何从order表中正确获取适当的order_id,该表始终与特定订单相关,并保证 任何时候都没有交易以不一致的状态结束。正确的做法是什么?

最佳答案

MySQL 的 LAST_INSERT_ID()函数将返回当前连接上最后一个 INSERT 操作的第一次成功插入的自动递增值。

您的 MySQL API 通常会提供一些围绕此函数调用的包装器,例如mysql_insert_id()在 PHP 中。

关于mysql - 根据主表主键值向子表插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10518831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com