我需要在一个表中插入唯一的值,并且需要记录的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中的值。
发布于 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();
发布于 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'
发布于 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/
https://stackoverflow.com/questions/20479971
复制相似问题