我读了一些关于这个主题的线程并尝试了很多,但我的代码不起作用。如果我的表中已经存在数据集,我不想插入两次。
我的桌子" 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,其他评论周,但这并不重要。
我的错误在哪里?
答案 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索引中的列指定前缀值,则为 列值在前缀中必须是唯一的。