2010-07-21 64 views
0

考慮我有兩個表,T1T2創建2條

T1 =(ID,姓名),T2 =(ID,FID)

在t2中的fidt1的外鍵。

創建行的步驟如下。

  1. 插入一行在T1,獲得ID
  2. 使用該ID和插入T2爲FID。

我的問題是:

由於T1的id是不明當事務沒有提交,因此如何執行插入到t2?

回答

3

如果ID是自動遞增table1中,那麼你可以做這樣的事情:

INSERT INTO t1 (name) VALUES ('whatever'); 
INSERT INTO t2 (fid) VALUES (LAST_INSERT_ID()); 

這個來自MySQL Reference Manual

編輯:如果我插入3個表t1,t2,t3如何?t2和t3都有一個fid等於t1。但是當t3插入fid時,LAST_INSERT_ID()屬於t2,而不是t1。

然後,你可以做這樣的事情:

INSERT INTO t1 (name) VALUES ('whatever'); 
SET @id=LAST_INSERT_ID(); 
INSERT INTO t2 (fid) VALUES (@id); 
INSERT INTO t3 (fid) VALUES (@id); 
... 
+0

事實上,在T1新的ID ** **是已知的。在一個併發的其他事務中(可能還有一個回滾或提交),id的順序可能會有差距,這應該不重要。 – Wrikken 2010-07-21 16:49:19

+0

如果我插入3個表格 t1,t2,t3 t2和t3的fid都等於t1。 但是當t3插入fid時,LAST_INSERT_ID()屬於t2,而不是t1。 – Ryan 2010-07-22 13:51:47

+0

我已編輯我的帖子來回答這個不同的問題。您只需保存'LAST_INSERT_ID()'的值,然後在需要時檢索它。 – KLee1 2010-07-22 15:55:38