获取新插入的元素或现有元素的最后一个ID



我有一个以下地图表,名称列上的唯一键:

id | name
1    aaa
2    bbb
3    ccc

如果我将新值插入此表,我想获得新创建的ID,例如:

INSERT IGNORE INTO map VALUES(null, 'ddd');

我知道我可以使用getLastId()函数来完成此操作。但是,如果已经存在一个名称,我也想获得ID,并且在这种情况下,getLastId()函数返回0:

INSERT IGNORE INTO map VALUES(null, 'ccc');

这是可以使用一个SQL进行的,而无需检查是否存在记录,等等?

我认为您需要为此付出更多英里:

  • 检查是否存在 - 何时:获取该名称的ID
  • 如果不是:SELECT LAST_INSERT_ID();

取决于单个查询的符合条件。

当您使用INSERT INTO ... ON DUPLICATE KEY UPDATE时,您可以以这种方式控制LAST_INSERT_ID(),以使其在insert上返回新ID和ROOD"更新"的ID:

INSERT INTO map (name) VALUE ('ccc') 
  ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id);

将使LAST_INSERT_ID()然后返回您感兴趣的行的map.id

无论您将其命名为getLastId()的API是什么(我不知道,所以我不能提供更多的指针),这可能不起作用,然后您需要发射第二个查询才能获取:

SELECT LAST_INSERT_ID();

也请参见:

  • 重复键上的mysql-最后一个插入ID?(stackoverflow Q& a,2009年4月)

相关内容

  • 没有找到相关文章

最新更新