将SELECT和INSERT查询合并为一个......可能吗?

时间:2011-12-02 01:11:44

标签: mysql insert

试图找出一个MySQL语句,这是一个常见的查询问题所以我没有使用任何设置索引......所以请耐心等待。 :)

有没有办法合并这两个查询。

SELECT * FROM tableName WHERE ID='123';
if (NUM_ROWS == 0) {
    INSERT INTO tableName (ID) VALUES (123)
}

基本上,我想检查某个条目是否存在,如果不存在,我想创建它。想象我可能能够一次击中DB而不是两次。

最终目标是仅在首先不存在行时才创建行。

谢谢!

4 个答案:

答案 0 :(得分:2)

如果ID列是PRIMARY KEYUNIQUE约束,那么只需尝试将其添加IGNORE,这样就不会收到任何错误消息(只是一个警告):

INSERT IGNORE INTO tableName (ID) 
  VALUES (123)

如果不是,这将是有效的:

INSERT INTO tableName (ID)
  SELECT 123
  FROM dual
  WHERE NOT EXISTS
        ( SELECT * 
          FROM tableName 
          WHERE ID = 123
        )

答案 1 :(得分:1)

您可能正在寻找REPLACE声明

答案 2 :(得分:1)

正如@uzi指出的那样,你可以使用REPLACE语句。但是,在插入之前删除记录,现在可能就是您想要的。

还有MySQL扩展INSERT ... ON DUPLICATE KEY UPDATE,但是如果找到记录,你将不得不在update子句中添加一些内容。

修改 哦,这两个语句也适用于重复的唯一键。

答案 3 :(得分:0)

在这些情况下,我倾向于使用简单的INSERT IGNORE INTO。请记住,这可能会产生其他副作用,例如其他转换错误会转换为纯粹的警告。