【发布时间】:2010-10-21 04:22:11
【问题描述】:
我有以下疑问:
INSERT INTO table (a) VALUES (0)
ON DUPLICATE KEY UPDATE a=1
我想要插入或更新的 ID。通常我会运行第二个查询以获得此信息,因为我相信 insert_id() 仅返回“插入”ID 而不是更新后的 ID。
有没有办法在不运行两个查询的情况下插入/更新并检索行的 ID?
【问题讨论】:
-
与其假设,不如自己测试一下?上面编辑中的 SQL 确实有效,并且通过我的测试,比使用 INSERT IGNORE 或选择先查看是否有重复发现插入失败要快。
-
警告:建议的解决方案有效,但即使没有插入,auto_increment 值也会继续增加。如果重复键经常出现,您可能需要在上述查询之后运行
alter table tablename AUTO_INCREMENT = 0;,以避免您的 id 值出现大的差距。 -
@FrankForte 你在开玩笑说
alter table在运行时,在生产中,有并发用户,对吧?