mysql插入值,如果它不存在

时间:2012-05-13 19:08:09

标签: mysql insertion

如果不存在,我正在尝试将成分插入成分表中。 我使用以下语法:

INSERT INTO ingredient(Name) 
(
 SELECT 'ingName' FROM dummytable WHERE 
(SELECT count(*) FROM ingredient WHERE Name = 'ingName')=0)

这似乎不起作用(0行受影响),即使SELECT查询似乎返回了所需的结果(包含“ingName”的条目)。

“ingredient”表有2列:Name,id(id是自动递增的)

谢谢, 李

2 个答案:

答案 0 :(得分:7)

最好在name列添加唯一索引:

ALTER TABLE `ingredient` ADD UNIQUE(`Name`)

完成后,您可以使用INSERT IGNORE

INSERT IGNORE INTO `ingredient` ... /* anything */

答案 1 :(得分:3)

这是因为您的内部查询SELECT count(*) FROM ingredient WHERE Name = 'ingName'正在返回值> 0因此上部查询SELECT 'ingName' FROM dummytable WHERE没有选择任何行,因此没有发生插入。

我尝试使用具有2列name|value的测试表并且它确实工作正常

    INSERT INTO test1(name) (
    SELECT 'name' FROM test2 WHERE  
   (
      SELECT count(*) FROM test2 WHERE name = 'bilboa'
     )
   =0
   ) 

插入值为name的2行会导致我在select查询和我的测试表中选择2行。