2011-12-27 26 views
0

我正在研究網頁索引機器人,並使用PHP和MySQL。其中一個表將用於存儲網頁列表。我希望該表有一個基於整數的id列(以便我可以更快地將它加入到其他表中,以便其他表可以在不存儲完整url的情況下引用它),但是我也希望url列能夠保持獨特。如何在MySQL中使用兩個唯一列來批量插入多行?

此問題出現的原因是,如果我的腳本讀取有250個鏈接的網頁,我不確定將它們添加到網頁表而不創建重複項的最佳方法。我可以循環查找我找到的250個鏈接,併爲它們中的每個查詢表以確保它們不存在,然後插入那些可以執行的操作 - 這將需要至少250個查詢。但是,如果我可以讓mysql強制url成爲一個獨特的列,我可以簡單地做一個insert ignore,聲明所有的鏈接。這將保持現有記錄在添加新記錄時被複制。如果我有這種類型的表是唯一/主要和自動遞增的整數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是唯一的主鍵,然後手動遞增id柱用PHP/MySQL的語句的另一個選項:

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列,但是如果沒有更好的選項,我可能會願意這樣做。

我的選擇是什麼?

回答

1

是的,您可以使url列具有唯一性。所以一個大的​​將完成這項工作。

不是使url主要!你的主鍵應該是id auto_increment字段;只需在url字段中創建一個唯一索引即可。

不要忘記,INSERT IGNORE是MySQL特有的,儘管如此,如果您打算支持例如PostgreSQL,那麼您的代碼將無法工作。

1

根據需要,您可以擁有儘可能多的UNIQUE索引,但只有一個PRIMARY之一(這就是爲什麼它被稱爲主)。

但是,MySQL中的自動增量僅適用於PRIMARY鍵。所以你應該有你的idAUTO_INCREMENTPRIMARY,你的urlUNIQUEPRIMARY也意味着UNIQUE,因此您不需要也不應將兩者都添加到單個列中。

相關問題