我有两个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,从而无法使用此查询插入另一个订单商品。
有没有办法让整个事情在单个交易中发挥作用,还是应该放弃并使用程序?
答案 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))