2

执行多个 MySQl 语句时,有没有办法可以获取最后插入的 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

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

4

1 回答 1

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, '...');
于 2014-09-18T16:17:45.503 回答