2011-12-02 74 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。請記住,這可能會產生其他副作用,例如其他轉換錯誤轉換爲單純的警告。

相關問題