Как я могу массово вставить несколько строк в MySQL с двумя уникальными столбцами? - PullRequest
0 голосов
/ 27 декабря 2011

Я работаю над роботом индексации веб-страниц и использую php и mysql.одна из таблиц будет хранить список веб-страниц.я хочу, чтобы в этой таблице был столбец id на основе целых чисел (чтобы я мог быстрее присоединить его к другим таблицам и чтобы другие таблицы могли ссылаться на него, не сохраняя полный URL-адрес в столбце), но я также хочу *Столбец 1002 * остается уникальным.

причина, по которой возникает этот вопрос, заключается в том, что если мой скрипт читает веб-страницу, содержащую 250 ссылок, я не уверен, что лучший способ добавить их в таблицу веб-страниц без созданиядубликаты.я мог бы зациклить 250 ссылок, которые я нашел, и запросить таблицу для каждой из них, чтобы убедиться, что они не существуют, а затем вставить те, которые делают - что потребовало бы как минимум 250 запросов.

однако,если бы я мог заставить mysql принудительно установить url в качестве уникального столбца, я мог бы просто сделать один оператор insert ignore со всеми ссылками.это предотвратит дублирование существующих записей при добавлении новых.если бы у меня был этот тип таблицы со столбцом целочисленного идентификатора, который является уникальным / основным и автоинкрементным, мог бы я также указать, что столбец 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, но я могу сделать это, если нет лучшего варианта.

Какие у меня варианты?

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Вы можете иметь столько индексов UNIQUE, сколько хотите, но только один PRIMARY один (именно поэтому он называется основным).

Автоматическое увеличение в MySQL, однако, работает только на PRIMARY ключи.Таким образом, у вас должны быть ваши id колонка AUTO_INCREMENT и PRIMARY, и ваша url колонка UNIQUE.PRIMARY также подразумевает UNIQUE, поэтому вам не нужно и не следует добавлять оба в один столбец.

1 голос
/ 27 декабря 2011

Да, вы можете сделать столбец url уникальным. Так что большой INSERT IGNORE INTO ... (...) VALUES (...), (...), ... сделает работу.

Do NOT сделать url первичным, хотя! Ваш первичный ключ должен быть полем id auto_increment; просто создайте уникальный индекс в поле url.

Не забывайте, что INSERT IGNORE зависит от MySQL, поэтому, если вы когда-либо планируете поддерживать, например, PostgreSQL, ваш код не будет работать.

...