我有一个以下地图表,名称列上的唯一键:
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月)