首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >mysql:如果不存在则插入记录,否则返回记录的id

mysql:如果不存在则插入记录,否则返回记录的id
EN

Stack Overflow用户
提问于 2013-12-10 04:22:09
回答 3查看 18K关注 0票数 22

我需要在一个表中插入唯一的值,并且需要记录的id,需要在关系表中插入这些id,如果不存在则需要查询插入记录,如果存在则返回记录主键(Id)。

我想对多个值这样做,比如橙色、芒果、香蕉,比如批量插入。

模式:

------------
id | tag   |
------------
1  | orange|
------------

我已经为一次记录做了这件事

INSERT INTO `tags` (`tag`) 
SELECT 'myvalue1' 
FROM tags
WHERE NOT EXISTS (SELECT 1 FROM `tags` WHERE `tag`='myvalue1') 
LIMIT 1

发布了这个问题是为了找出一些优化的解决方案,我不想在代码中使用额外的循环来匹配db中的值。

EN

回答 3

Stack Overflow用户

发布于 2013-12-10 05:07:00

INSERT ... ON DUPLICATE KEY UPDATE的文档页面上有一个示例

您的查询将如下所示:

INSERT INTO `tags` (`tag`) VALUES ('myvalue1')
  ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), `tag`='myvalue1';
SELECT LAST_INSERT_ID();
票数 15
EN

Stack Overflow用户

发布于 2016-05-21 16:53:22

下面是要插入(如果不存在)的mysql状态,并返回id,无论是new insert还是old

    INSERT INTO `tags` (`tag`) 
SELECT 'myvalue1' 
FROM tags
WHERE NOT EXISTS (SELECT id FROM `tags` WHERE `tag`='myvalue1') 
LIMIT 1;
select * from brand where `tag`='myvalue1'
票数 3
EN

Stack Overflow用户

发布于 2014-03-12 11:17:54

下面的链接中列出了4种方法,请查看并使用适合您的方法。

方法1:先选择,然后插入方法2:尝试{插入}捕获{选择}方法3:插入忽略然后选择方法4:插入到…中关于重复密钥更新

http://mikefenwick.com/blog/insert-into-database-or-return-id-of-duplicate-row-in-mysql/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20479971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档