我有兩個MySQL數據庫表,用於保存eshop訂單的數據。它們是這樣構建的(非常簡化的版本):在MySQL事務中保留自動增量ID
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()
後,將停止返回訂單標識,而是返回訂單商品標識,從而無法使用此查詢插入其他訂單商品。
有沒有辦法讓這個事情在單個事務中工作,或者我應該放棄並使用一個過程?
這是錯誤的:「我必須提交訂單INSERT查詢,得到的自動增量ID,然後開始爲訂單項目其他事務」。我一直在這裏看到這個在stackoverflow。你從哪裏學到的? – longneck 2009-10-16 14:37:14
@longneck我想你誤會了。那是我解釋我不想遵循的過程。 – 2009-10-17 10:58:29