同一请求中的LAST_INSERT_ID()

时间:2014-01-14 03:44:39

标签: mysql

是否可以添加新条目,复制其ID(自动递增)并将其添加到条目列中。我正在寻找的例子:

INSERT INTO `my_stuff` (title`, `description`, `this_entry_ID`) VALUES ('$my_stuff', '$description', LAST_INSERT_ID())");

现在,我使用两个请求来执行此操作:

  1. 添加新条目并复制新条目的ID(使用LAST_INSERT_ID()
  2. 使用LAST_INSERT_ID()数据更新条目。
  3. 这可以一次完成吗?

    注意:LAST_INSERT_ID()仅供参考,用于描述我需要的内容。

4 个答案:

答案 0 :(得分:1)

您无法执行在插入中使用目标表的子查询。

insert into TheTable (Name, LastID) values ("New 1", (select Id from TheTable order by Id DESC limit 1) );

但是你不应该做你建议的错误。

insert into TheTable (Name, LastID) values ("New 1", LAST_INSERT_ID() );

答案 1 :(得分:1)

您可以撰写TRIGGER,立即AFTER INSERT更新其this_entry_ID列。

答案 2 :(得分:1)

LAST_INSERT_ID()在连接期间有效,因此如果您对两个查询使用相同的连接,它将起作用。

如果您的连接库每个请求支持多个命令,您只需用分号分隔两个查询并进行一次数据库调用。

答案 3 :(得分:1)

好的...谢谢大家,看来我已经成功解决了这个问题。再一次 - 任务很奇怪所以解决方案也很奇怪。也许你可以提供更好的东西在这里:

SELECT AUTO_INCREMENT  INTO @stuff FROM information_schema.TABLES
WHERE TABLE_NAME = 'gallery_albums';

INSERT INTO `gallery_albums` (`album_title`, `album_description`, `parent_id`,  `created_at`, `views`, `added_by`, `chain`) VALUES ('xxx', 'cccc', '0', 'vvvv', '0', 'bbb', @stuff)