如何在单个查询一对多关系中使用LAST_INSERT_ID?

时间:2011-08-06 02:26:08

标签: mysql relational-database

我有两个表,问题答案。 答案包含一个键* question_id *

当我创建问题时,我将一条记录插入 questions 表,并将几条记录插入 answers 表。是否可以使用LAST_INSERT_ID()或类似方法在一个查询中执行所有这些操作?

即。

之类的东西
INSERT INTO questions VALUES(NULL, 'My question');

INSERT INTO answers VALUES(NULL, LAST_INSERT_ID(), 'Answer 1');
INSERT INTO answers VALUES(NULL, LAST_INSERT_ID(), 'Answer 2');
INSERT INTO answers VALUES(NULL, LAST_INSERT_ID(), 'Answer 3');

显然,由于LAST_INSERT_ID()在每个语句之后发生更改,因此此查询无效。无论如何要做这项工作还是我必须将其分解为两个问题?

2 个答案:

答案 0 :(得分:5)

您可以使用以下批量插入内容:

INSERT INTO answers VALUES
          (NULL, LAST_INSERT_ID(), 'Answer 1') , 
          (NULL, LAST_INSERT_ID(), 'Answer 2') , 
          (NULL, LAST_INSERT_ID(), 'Answer 3');

答案 1 :(得分:1)

尝试将de值存储到变量

INSERT INTO questions VALUES(NULL, 'My question');
SET @id = (SELECT LAST_INSERT_ID());
INSERT INTO answers VALUES(NULL, @id, 'Answer 1');
INSERT INTO answers VALUES(NULL, @id, 'Answer 2');
INSERT INTO answers VALUES(NULL, @id, 'Answer 3');

我认为还有另一种方法可以做到,但也许会给你一个想法。