mysql插入只有在不存在的情况下才能工作

时间:2016-07-17 20:24:56

标签: mysql

我读了一些关于这个主题的线程并尝试了很多,但我的代码不起作用。如果我的表中已经存在数据集,我不想插入两次。

我的桌子" WORD"一些示例数据(id是自动增量)。

id | customer_id | category_id | word | comment
1      3             5           life   null
2      5             5           motor   tbd
3      null          2           Day     week

我只想检查customer_id,category_id,word。如果新行具有完全相同的customer_id,category_id和word,我不想插入它。评论和id dosn's。

我的代码:

insert into word (customer_id, category_id, word) 
select * from (select null, 2, 'Day') as tmp 
where not exists (select * from word where customer_id=null and category_id=2 and word='Day')
limit 1

这是插入的:( 他正在插入它,虽然我有一行(id = 3),null / 2 / Day。新插入的评论为null,其他评论周,但这并不重要。

我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

select * from word where customer_id=null

应该是

select * from word where customer_id IS NULL

请参阅手册中的此网站:http://dev.mysql.com/doc/refman/5.7/en/working-with-null.html

如果您的用例允许约束,则在语句中避开变通方法的方法是在这些列上设置唯一索引。 http://dev.mysql.com/doc/refman/5.7/en/create-index.html

  

UNIQUE索引创建一个约束,以便索引中的所有值   必须是截然不同的如果您尝试使用a添加新行,则会发生错误   与现有行匹配的键值。对于所有引擎,都是独一无二的   index允许包含NULL的列的多个NULL值。   如果为UNIQUE索引中的列指定前缀值,则为   列值在前缀中必须是唯一的。