2014-09-18 121 views
2

当执行多个MySQl语句时,有没有办法让我可以得到最后插入的ID并将其插入到另一个表中?例如,如果主键是我的第二个表中的外键。Mysql插入获取ID然后插入返回的Id

表一个

user_id | username| 
------------------- 
1  |userone 
2  |usertwo 
3  |userthree 

表2

contact_id | user_id | contact_name 
------------------------------------ 
12   | 1  | John Doe 
18   | 2  | Jane Doe 
23   | 3  | An other 

基本上我想在同一时间上的两个表中插入,插入上表中的一个,然后使用该值来插入上表二 ,而不是插入表一,然后在表二。

回答

0

是的,函数LAST_INSERT_ID()返回当前会话中自动增量列生成的最新ID。

所以,你可以插入到你的主表:

INSERT INTO `table1` (username) VALUES ('...'); 

然后插入子表:

INSERT INTO `table2` (user_id, contact_name) VALUES (LAST_INSERT_ID(), '...'); 

如果你有多个行插入到子表,子表的主键本身会生成新值,这意味着您必须将该值保存在变量中以多次重复使用。否则,子表的PK将成为新近生成的新值。下面是一个将值保存在MySQL会话变量中的示例:

SET @user_id = LAST_INSERT_ID(); 
INSERT INTO `table2` (user_id, contact_name) VALUES (@user_id, '...'); 
INSERT INTO `table2` (user_id, contact_name) VALUES (@user_id, '...'); 
INSERT INTO `table2` (user_id, contact_name) VALUES (@user_id, '...');