簡體   English   中英

如何使用兩個唯一列在MySQL中批量插入多行?

[英]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鍵。 所以你應該有你的idAUTO_INCREMENTPRIMARY ,以及你的urlUNIQUE PRIMARY也意味着UNIQUE因此您不需要也不應該在單個列上添加兩者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM