2011-12-02 76 views
0

试图找出一个MySQL的声明,这是一种普遍的查询问题,所以我没有使用任何设置索引...所以忍受着我。 :)将SELECT和INSERT查询组合成一个...可能吗?

有没有办法将这两个查询结合起来。

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

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

最终目标是仅在不存在第一个时才创建行。

谢谢!

回答

2

如果ID列是PRIMARY KEY或有UNIQUE约束,然后简单地尝试与IGNORE添加它,这样你就不会得到任何错误消息(仅警告):如果它不是

INSERT IGNORE INTO tableName (ID) 
    VALUES (123) 

“T,这将一般工作:

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

谢谢!这工作完美。 –

1

您可能正在寻找REPLACE声明

+0

如果您只想在行不存在的情况下插入该怎么办? –

1

由于@uzi指出的那样,你可以使用REPLACE声明。但是,这将删除插入前的记录,现在可能是你想要的。

还有一个MySQL扩展INSERT ... ON DUPLICATE KEY UPDATE,但是如果找到记录,您将不得不在添加更新子句。

编辑: 哦,而且这两个声明适用于重复的唯一键。

0

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

相关问题