2010-07-21 39 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