2013-05-06 72 views
1

所以我在某時刻獲得數據約100個項目,並將其插入到MySQL數據庫這樣的命令的腳本:SQL查詢不添加新條目使用INSERT忽略INTO

INSERT IGNORE INTO beer(name, type, alcohol_by_volume, description, image_url) VALUES('Bourbon Barrel Porter', 2, '9.1', '', '') 

我跑了腳本一次,並用100個條目填充數據庫。但是,我使用相同的SQL語法再次運行腳本,收集所有新數據(即沒有重複數據),但數據庫沒有反映任何新條目 - 這與我在第一次迭代腳本時插入的相同的100個條目。

我記錄了查詢,並且我可以確認查詢是用新數據發出請求的,所以在腳本中沒有收集新數據的問題。

名稱字段是唯一的字段,但沒有其他字段。我錯過了什麼嗎?

回答

0

如果使用IGNORE關鍵字,則執行INSERT語句時發生的錯誤將被視爲警告。例如,在沒有IGNORE的情況下,表中現有的UNIQUE索引或PRIMARY KEY值重複的行會導致重複鍵錯誤,並且語句會中止。使用IGNORE,該行仍未插入,但未發出錯誤。

如果沒有主鍵,則不能有重複鍵忽略。你應該總是設置一個主鍵,所以請做到這一點 - 如果你想有更多的不應該重複的柱子,將它們設置爲「unique」。

+0

我插入的表除了唯一的名稱字段外,還有唯一的主鍵id。主鍵字段是一個整數,它被設置爲自動遞增。不過,我的SQL語句並沒有顯式插入主鍵。因此,如果我沒有明確插入帶有IGNORE INSERT語句的主鍵,它是否嘗試從ID 1開始插入鍵,從而導致腳本不寫入任何新內容?如果我有一個主鍵整數,如果它是auto_increment的話,我的印象就是它只會停留在那裏。 – user1427661 2013-05-06 04:49:32