我在MySQL中有以下简单的插入查询
insert into eventimages (eventid, imageid) values (x, y)
我想修改,以便只有在没有创建重复行时才会发生插入。 我猜这个地方我需要包括像
这样的东西if not exists (select * from eventimages where eventid = x and imageid = y)
任何人都可以帮助解决语法问题。
干杯
答案 0 :(得分:6)
防止重复的“正确”方法是在列对上放置一个唯一的约束/索引:
create unique index eventimages_eventid_imageid on eventimages(eventid, imageid);
然后这种情况将始终保证是真实的。常规插入将失败,创建重复的update
也将失败。以下两种方法可以忽略此类错误:
insert ignore into eventimages (eventid, imageid)
values (x, y);
这将忽略插入中的所有错误。这可能是矫枉过正的。你也可以这样做:
insert into eventimages(eventid, imageid)
values (x, y)
on duplicate key update eventid = x;
update
语句是无操作。目的只是为了抑制重复键错误。
答案 1 :(得分:1)
insert into eventimages (eventid, imageid)
select x,y
from dual
where not exists (select 1
from eventimages
where eventid = x and imageid = y)
SQLFiddle示例:http://sqlfiddle.com/#!2/070563/1
答案 2 :(得分:1)
INSERT INTO eventimages (eventid, imageid)
Select * from (select x as eventid,y as imageid from eventimages) AS tmp
WHERE NOT EXISTS (
select * from eventimages where eventid = x and imageid = y
) LIMIT 1;