保留MySQL事务中的自动增量ID

时间:2009-10-16 08:33:02

标签: php mysql transactions

我有两个MySQL数据库表,用于保存eshop订单的数据。它们是这样构建的(非常简化的版本):

CREATE TABLE `orders` (
`id` int(11) NOT NULL auto_increment
PRIMARY KEY  (`id`)
);

CREATE TABLE `order_items` (
  `id` int(11) NOT NULL auto_increment,
  `orderID` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
)

两者之间的关系是orders.id对应于order_items.orderID。

我正在使用交易来下新订单,但是在保留上述关系时遇到问题。为了获得新的订单ID。我必须提交命令INSERT查询,获取自动增加的id,然后为订单项启动另一个事务。这几乎违背了使用交易的重点。

我可以在订单表中插入新订单,然后尝试类似

的内容
INSERT INTO order_items(orderID) VALUES(LAST_INSERT_ID()) 

我认为可行。但是,在插入第一个订单项后,LAST_INSERT_ID()将停止返回订单ID,而是返回订单商品ID,从而无法使用此查询插入另一个订单商品。

有没有办法让整个事情在单个交易中发挥作用,还是应该放弃并使用程序?

2 个答案:

答案 0 :(得分:4)

这项工作是什么?:

INSER QUERY;
SET @insertid = LAST_INSERT_ID();
INSERT INTO `order_items` SET `OrderID` = @insertid;

所有声明。您将不得不仔细检查语法

答案 1 :(得分:0)

你不能指望LAST_INSERT_ID(),因为当你向order_items插入值时它也会改变,因为它插入了它的id也是auto_imcrement。 也许你可以试试这个。

INSERT INTO order_items(orderID) VALUES((SELECT id FROM orders ORDER BY id desc LIMIT 1))