我有一個包含3列的表 - id(pk),pageId(fk),name。我有一個php腳本,它將大約5000條記錄轉儲到表中,其中大約一半是重複的,具有相同的pageId和名稱。 pageId和名稱的組合應該是唯一的。當我在php中循環腳本時,防止重複項保存到表中的最佳方法是什麼?避免重複進入mysql數據庫的最佳方法
回答
第一步是設置一個唯一的鑰匙放在桌子上:
ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);
然後,你必須決定你想要做什麼時,有一個重複。你應該:
忽略它嗎?
INSERT IGNORE INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo");
覆蓋之前輸入的記錄?
INSERT INTO thetable (pageid, name, somefield) VALUES (1, "foo", "first") ON DUPLICATE KEY UPDATE (somefield = 'first') INSERT INTO thetable (pageid, name, somefield) VALUES (1, "foo", "second") ON DUPLICATE KEY UPDATE (somefield = 'second')
更新計數器?
INSERT INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo") ON DUPLICATE KEY UPDATE (pagecount = pagecount + 1)
您可以將PageID和Name設置爲MySQL數據庫中的唯一索引。這樣插入行時,會導致一個錯誤,PHP可以忽略這個錯誤,您可以直接進入下一行。
這裏假定您要單獨插入行。又名:
foreach($large_data as $fields)
{
mysql_query("INSERT INTO TABLE (`Something`) VALUES('".$fields['something']."');
}
有意允許的mysql_query()拋出PHP警告,當你打重複行是那種凌亂(它雜波您的日誌,它的資源相對密集的,等等)。特別是在首先防止它們就像使用其他解決方案中提到的MySQL的'INSERT IGNORE'功能一樣簡單。另外,在批量插入語法可用時,插入循環效率不高。 – 2010-02-08 06:58:13
從MySQL點,你可以做
alter table YOURTABLE add unique index(pageId, name);
如果你的寫法是正確的,你想從PHP這樣做,你可以做
$already_done = array();
foreach ($records as $record)
{
$unique_hash = md5($record['name'].$record['pageId']);
if (!in_array($unique_hash, $already_done))
{
$already_done[] = $unique_hash;
// sql insert here
}
}
無論哪種方式,這些應你沒事吧。
當然,如果在腳本啓動之前*表中已經有記錄,那麼這些記錄就不會出現在'$ already_done'中。 – 2010-02-08 07:00:28
您也可以忽略mysql的錯誤:INSERT IGNORE INTO TABLE ...它會忽略關鍵錯誤,跳過該插入並轉到下一個。
- 1. 避免代碼重複 - 最佳方法
- 2. mysql - 避免重複的最好方法
- 3. 限制傳入消息以避免重複的最佳方法
- 4. MySQL避免數據重複與插入
- 5. 如何避免將重複項插入數據庫最有效的方法?
- 6. 使用Spring避免數據庫輪詢的最佳方法
- 7. 最好的方式,以避免增加重複數據庫
- 8. 在SQL中避免重複子查詢的最佳方法
- 9. 使用片段時避免重複代碼的最佳方法
- 10. 避免MySQL中重複的長文本條目的最佳方法
- 11. 最有效的方法來避免重複數據清理
- 12. 從兩個mysql數據庫複製數據的最佳方法
- 13. 避免執行javascript的最佳方法
- 14. 避免假用戶的最佳方法
- 15. 避免違反LSP的最佳方法
- 16. 插入數據庫的最佳方法?
- 17. 的Python/MySQL的避免重複插入
- 18. 如何避免數據重複插入?
- 19. 如何避免重複數據插入?
- 20. 我們如何避免mysql數據庫中的重複值
- 21. 什麼是避免這種重複代碼的最佳方式
- 22. Mysql避免重複的URLS
- 23. SQL:避免重複數據
- 24. 避免重複鍵/數據
- 25. 避免重複數據PostgreSQL
- 26. 如何避免重複的數據導入MySQL表?
- 27. 避免代碼重複的最佳做法(symfony2)
- 28. 測試數據庫中重複密鑰的最佳方法
- 29. 避免在mysql中重複輸入
- 30. 避免重複在mysql插入
BIG謝謝,這是我在Stack Overlow上研究了一段時間的問題的絕佳答案。 – capfu 2011-10-25 06:29:12