2012-01-28 87 views
3

我習慣了在SQL Server如果(SELECT ...)= 0 INSERT。在MySQL

IF (SELECT COUNT(*) FROM table WHERE [email protected]) = 0 
INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3) 

這樣做,但我真的不能讓它在MySQL的。請幫忙:)

----------------編輯------------------

There shouldn'我會承擔很多大驚小怪的事情。

If an e-mail does not exist in a table then insert several values into that table. 

就是這樣。最好是一個襯墊,嵌入編程代碼。你

+0

可能的重複[我如何更新如果存在,插入如果不是(又名upsert或合併)在MySQL?](http://stackoverflow.com/questions/1218905/how-do-i-update-if-存在插入如果沒有插入或合併在mysql中) – 2012-01-28 11:04:50

+0

它是完整的查詢嗎?或者只是一個專欄?如果它的一列然後把你的完整查詢。 – Bajrang 2012-01-28 11:05:35

+0

關於你的編輯:閱讀我的答案如下:-)沒有魔術涉及 – Kaii 2012-01-28 11:51:24

回答

4

另一種方式來做到這一點是使用INSERT IGNORE聲明。假設column1應該只包含唯一值,你可以在字段中添加UNIQUE KEY約束(如果不是你的主已經鍵):

ALTER TABLE table ADD UNIQUE KEY column1 (column1) 

然後你可以寫你的查詢這樣:

INSERT IGNORE INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3) 

或者,如果你想自動更新等領域,使用ON DUPLICATE KEY UPDATE

INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3) 
ON DUPLICATE KEY UPDATE column2 = @value2, column3 = @value3 

讓數據庫處理,它會自動使用uniqu e鍵有以下幾個優點:通過索引的使用

  • 更好的性能和可擴展性,而不是全表掃描
  • 故障安全 - 你不能添加兩行相同的唯一標識符不小心用錯了查詢
  • 更好您的查詢的可讀性

注意:唯一鍵也可以跨越多行。愚蠢的例子:「ip」和「port」的組合可以被組合爲唯一標識符「連接」。

+0

感謝您的建議,但不幸的是,電子郵件並不是唯一的。唯一唯一的字段和密鑰是自動遞增的ID – Jesper 2012-01-28 11:50:13

+0

,但在您的問題中,似乎您試圖阻止同一電子郵件地址的多個條目...定義它獨特的聲音就像正確的解決方案? – Kaii 2012-01-28 11:55:08

+0

哈哈......授予:D數據庫有點混亂,我不想讓事情變得更糟。 LOL – Jesper 2012-01-28 11:57:56

0

也可以做這樣的:

Declare @count INT; 
SET @count = (SELECT COUNT(*) FROM table WHERE [email protected]); 
IF (@count = 0) 
INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3)