我必須從外部來源插入一些數據。
我的php函數定期運行並獲取結果&將這些插入到表中。如何在mysql中丟棄重複記錄的插入?
通常會有已保存的結果。
所以他們再次插入。
如何丟棄重複的結果以便只輸入新結果&重複被丟棄。
我必須從外部來源插入一些數據。
我的php函數定期運行並獲取結果&將這些插入到表中。如何在mysql中丟棄重複記錄的插入?
通常會有已保存的結果。
所以他們再次插入。
如何丟棄重複的結果以便只輸入新結果&重複被丟棄。
如果您可以修改數據庫表的結構,最好的方法是將列的UNIQUE INDEX或許多列一起添加唯一標識單個條目的列。例如:
ALTER TABLE table
ADD UNIQUE INDEX name
(column_one
,column_two
);
如果該表已經包含重複記錄,則更改嘗試將導致錯誤。在這種情況下,您可以用忽略:
ALTER TABLE忽略ADD table
UNIQUE INDEX name
(column_one
,column_two
);
請記住,創造不必要的巨大的索引將導致:採取
http://dev.mysql.com/doc/refman/5.1/en/create-index.html (頁描述了創建索引的另一種方式,但也引用了ALTER TABLE)
我知道這聽起來很愚蠢,但確定如何檢測重複項並且不要插入它們。
這取決於您的數據集。如果您有唯一的字段,最簡單的方法是在數據庫中的該字段上設置唯一索引,即主鍵,並且數據庫不允許插入副本。只要檢查你的錯誤,如果你得到重複的關鍵錯誤,不理會你期望的東西。
這就是關於主鍵的一點,如果你明智地定義了主鍵,你將不必處理重複項,因爲你不會有任何重複項。
INSERT IGNORE ...
命令完成此操作,假設您在表上設置了主鍵。
如果您還沒有主鍵,請將其設置爲具有相同名稱/ ID的記錄的名稱或ID,表示重複的數據。
所有關係數據庫都允許在單個行上使用主鍵和唯一約束。
所以,如果你有一個PERSON
表的first_name
和last_name
列person_id
柱和獨特的組合,你應該讓person_id
主鍵和(first_name, last_name)
添加的唯一約束。即使主鍵是唯一的,您也無法插入違反唯一約束的行。
INSERT ... ON DUPLICATE KEY UPDATE ... - http:// dev。 mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – ajreal 2010-11-27 15:10:30
INSERT IGNORE`只會在沒有唯一鍵衝突的情況下插入,否則什麼也不做。 `ON DUPLICATE`將會更新。 `REPLACE`將刪除/插入else。 – Konerak 2010-11-27 20:57:05
我嘗試避免使用REPLACE語句,因爲它會刪除任何唯一鍵衝突,而不僅僅是那些來自主鍵的衝突。 – Danosaure 2010-11-28 02:19:04