MySQL"插入....不存在的地方"正在提出所有错误

时间:2014-11-29 22:58:42

标签: mysql

这有效:

insert into answers 
    (survey,user,answer)
    values(1,'hi',1)
;

这有效:

select * from answers where survey=1 and user='hi';

这不起作用:

insert
    into answers 
    (survey,user,answer)
    values(1,'hi',1)
    where not exists (select * from answers where survey=1 and user='hi')
;

它在“where not exists”子句的右边给出了一个错误1064。我已查找了所有可以找到的文档,但我发现它没有任何问题。

思想?

3 个答案:

答案 0 :(得分:1)

您可以使用insert . . . select执行此操作,但不能执行insert . . . values

insert into answers(survey, user, answer)
    select survey, user, answer
    from (select 1 as survey, 'hi' as user, 1 as answer) s
    where not exists (select 1 from answers a where a.survey= s.survey and a.user = s.user);

那就是说,我建议你让answer(survey, user)使用唯一键或主键,这样数据库就会强制执行唯一性约束。

答案 1 :(得分:1)

MySQL中INSERT语句的语法(https://dev.mysql.com/doc/refman/5.6/en/insert.html)没有“where not exists”。

您可能想要的是INSERT IGNORE INTO answers (survey,user,answer) values(1,'hi',1)。这会插入值,除非它与表上的主键或唯一键冲突,在这种情况下,值将被忽略。

答案 2 :(得分:1)

实际上,INSERT INTO ... VALUES ...表示法不支持WHERE子句。相反,您需要使用INSERT INTO ... SELECT ...表示法,您可以在其中指定实际查询以生成要插入的行。当然,该查询可以包含WHERE子句:

insert
    into answers 
    (survey,user,answer)
    select 1,'hi',1
    from (select 1)
    where not exists (select * from answers where survey=1 and user='hi')
;