Mysql 获取新插入元素或现有元素的最后一个ID
我有一个以下映射表,名称列上有一个唯一键:Mysql 获取新插入元素或现有元素的最后一个ID,mysql,Mysql,我有一个以下映射表,名称列上有一个唯一键: 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'
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,而不检查记录是否存在,等等?我认为您需要为该SQL付出额外的努力:
- 检查是否存在-如果存在:获取该名称的ID
- 如果没有:
选择最后一个插入ID()代码>
- 检查是否存在-如果存在:获取该名称的ID
- 如果没有:
选择最后一个插入ID()代码>
- 我认为你需要为这一点付出额外的努力:
插入到。。。在重复密钥更新时
您可以控制最后一次插入\u ID()
,这样它将在插入时返回新ID,并在更新时返回“更新”行的ID:
INSERT INTO map (name) VALUE ('ccc')
ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id);
这将使最后一次插入\u ID()
然后返回您感兴趣的行的map.ID
无论您将哪个API命名为getLastId()
(我不知道,因此无法提供更多关于它的指针),这可能不起作用,然后您需要启动第二个查询来获取它:
SELECT LAST_INSERT_ID();
另见:
- (Stackoverflow问答,2009年4月)
插入到。。。在重复密钥更新时
您可以控制最后一次插入\u ID()
,这样它将在插入时返回新ID,并在更新时返回“更新”行的ID:
INSERT INTO map (name) VALUE ('ccc')
ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id);
这将使最后一次插入\u ID()
然后返回您感兴趣的行的map.ID
无论您将哪个API命名为getLastId()
(我不知道,因此无法提供更多关于它的指针),这可能不起作用,然后您需要启动第二个查询来获取它:
SELECT LAST_INSERT_ID();
另见:
- (Stackoverflow问答,2009年4月)
getLastId()
即使在插入时也不会给出“id”列的值。您案例中的ID是“name”。你已经有“名字”了。我想说的是,这更像是一个关于身份实际上是什么的概念。getLastId()
即使在insert中也不会给出“id”列的值。您案例中的ID是“name”。你已经有“名字”了。我想说的是,这更像是一个关于身份的概念。