如果不存在语法MySQL

时间:2014-03-05 11:37:34

标签: mysql sql

我在MySQL中有以下简单的插入查询

insert into eventimages (eventid, imageid) values (x, y)

我想修改,以便只有在没有创建重复行时才会发生插入。 我猜这个地方我需要包括像

这样的东西
if not exists (select * from eventimages where eventid = x and imageid = y)

任何人都可以帮助解决语法问题。

干杯

3 个答案:

答案 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;

sqlfiddle