2013-10-15 148 views
2

我正在創建一個SQL腳本,它將在新環境中運行時向數據庫添加特定條目。但我想要插入查詢,以確保數據在嘗試插入之前不存在。在插入到MySQL數據庫之前檢查數據

我想出的查詢聽起來很合適。但由於某種原因它給我一個語法錯誤。是的,我已經RTFM了。我已經Google了它。基於我見過的其他例子(甚至在Stack Exchange上),它看起來很適合我。任何人都可以識別我做錯了什麼?

查詢:

INSERT INTO my_model (status, name) VALUES ('active', 'bbc') 
WHERE NOT EXISTS (SELECT name FROM my_model WHERE name = 'bbc') 

任何想法?

+0

你不能那樣做。您可以嘗試使用MERGE: http://stackoverflow.com/questions/545593/how-to-insert-with-where-clause – Lawson

+1

一般提示:如果您收到錯誤消息,請向我們顯示。然後RTFM:http://dev.mysql.com/doc/refman/5.6/en/insert.html INSERT沒有'WHERE'子句。 –

+0

'name'是唯一的關鍵? –

回答

3

的滑動INSERT不允許WHERE。如果主鍵是(status, name),則使用INSERT IGNORE,因爲@aynber存在。如果沒有,嘗試INSERT ... SELECT

INSERT INTO my_model (status, name) 
SELECT 'active', 'bbc' 
FROM DUAL 
WHERE NOT EXISTS (SELECT name FROM my_model WHERE name = 'bbc'); 

DUAL是系統提供的一個行的表,用來保證結果的一排這樣的事情SELECT 'active', 'bbc' FROM DUAL。這是Oracle的「發明」,但在MySQL中得到了支持。您可以從查詢中刪除FROM DUAL;我今天沒有MySQL,所以我無法測試它。

+0

我結束了使用此:INSERT INTO my_model(active_status,name)SELECT'active','bbc'FROM DUAL WHERE NOT EXISTS(SELECT name FROM my_model WHERE name ='bbc') – pthurmond

0

如果name是主鍵/唯一鍵,您想要INSERT IGNORE而不是NOT EXISTS。如果遇到重複鍵錯誤,則不會插入任何內容。如果您想要在列已存在的情況下更新列,也可以使用ON DUPLICATE KEY UPDATE

在SQL
0

我將創建一個存儲過程 如果你能在MySQL不知道

如果!(SELECT名字來自my_model其中name = 'BBC') BEGIN INSERT INTO my_model(狀態,名稱)VALUES ( '活性', 'BBC') END

1

嘗試:

INSERT INTO my_model (status, name) select('active', 'bbc') from my_model 
WHERE NOT EXISTS (SELECT name FROM my_model WHERE name = 'bbc'); 
相關問題