【问题标题】:mysql insert value if it doesn't existmysql插入值,如果它不存在
【发布时间】:2012-05-21 09:53:00
【问题描述】:

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

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

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

“成分”表有 2 列:名称、id(id 自动递增)

谢谢, 李

【问题讨论】:

    标签: mysql insertion


    【解决方案1】:

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

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

    完成后你可以使用INSERT IGNORE:

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

    【讨论】:

    • 这个问题比较好解决
    • 谢谢 :) 我可能会切换到这个解决方案,但我真的很想知道为什么我的代码不起作用......
    【解决方案2】:

    这是因为您的内部查询 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
       ) 
    

    插入 2 行,值为 name,因为这就是我在选择查询中选择的内容和我的测试表 2 行。

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 2014-04-14
      • 2012-06-09
      • 2013-01-10
      • 1970-01-01
      相关资源
      最近更新 更多