我需要在表中插入唯一值,并且需要记录的id,需要在关系表中插入这些id, 需要查询插入记录如果不存在则返回inset 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的值。
答案 0 :(得分:14)
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();
答案 1 :(得分:2)
以下链接中列出了4种方法,请查看并使用适合您的方法。
方法1:SELECT,然后INSERT 方法2:尝试{INSERT} catch {SELECT} 方法3:INSERT IGNORE然后SELECT 方法4:INSERT INTO ... ON DUPLICATE KEY UPDATE
http://mikefenwick.com/blog/insert-into-database-or-return-id-of-duplicate-row-in-mysql/
答案 2 :(得分:0)
答案 3 :(得分:0)
如果不存在则插入mysql状态,并返回新插入或旧
的id 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'