[英]How can I mass insert multiple rows in MySQL with two unique columns?
我正在使用網頁索引機器人並使用php和mysql。 其中一個表將存儲網頁列表。 我希望該表具有基於整數的id
列(以便我可以更快地將其連接到其他表,以便其他表可以引用它而不將完整的URL存儲在列中),但我還希望url
列為保持獨特。
這個問題出現的原因是,如果我的腳本讀取一個包含250個鏈接的網頁,我不確定將它們添加到網頁表而不創建重復項的最佳方法。 我可以循環我找到的250個鏈接並查詢每個鏈接以確保它們不存在,然后插入那些 - 這需要至少250個查詢。
但是,如果我可以讓mysql強制url
成為一個唯一的列,我可以簡單地insert ignore
一個包含所有鏈接的insert ignore
,statement。 這將使現有記錄在添加新記錄時不會被復制。 如果我有這種類型的表具有唯一/主要和自動遞增的整數id列,我還可以指定url列是唯一的嗎?
id (auto inc) url added
----------------------------------------------------------------------
1 http://site.com/page-a/ 2010-01-01 01:23:34
2 http://site.com/page-b/ 2010-01-01 01:23:34
3 http://site.com/page-c/ 2010-01-01 01:23:34
我想到的另一個選擇是將url設置為唯一的主鍵,然后使用php / mysql語句手動遞增id
列:
url (unique, primary) id added
-------------------------------------------------------------
http://site.com/page-a/ 1 2010-01-01 01:23:34
http://site.com/page-b/ 2 2010-01-01 01:23:34
http://site.com/page-c/ 3 2010-01-01 01:23:34
看起來好像允許mysql強制執行一個唯一的url列(從而允許我的insert ignore
方法),並允許我加入一個整數。 唯一奇怪的是必須依靠我的腳本來添加和增加id列,但如果沒有更好的選擇,我可能願意這樣做。
我有什么選擇?
是的,您可以使url
列唯一。 所以一個大的INSERT IGNORE INTO ... (...) VALUES (...), (...), ...
將完成這項工作。
不要讓url
初級盡管! 您的主鍵應該是id
auto_increment字段; 只需在url
字段上創建一個唯一索引。
不要忘記INSERT IGNORE
是特定於MySQL的,所以如果您計划支持例如PostgreSQL,那么您的代碼將無效。
您可以擁有任意數量的UNIQUE
索引,但只能使用一個PRIMARY
索引(這就是為什么它被稱為主要索引)。
但是,MySQL中的自動增量僅適用於PRIMARY
鍵。 所以你應該有你的id
列AUTO_INCREMENT
和PRIMARY
,以及你的url
列UNIQUE
。 PRIMARY
也意味着UNIQUE
因此您不需要也不應該在單個列上添加兩者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.