2010-11-27 3 views
0

Мне нужно вставить некоторые данные из внешнего источника.
Моя функция php периодически запускается и извлекает результаты &, вставляя их в таблицу.Как сбросить вставку дубликатов записей в mysql?

Часто есть результаты, которые уже сохранены.
Таким образом, они снова вставлены.

Как отбросить те результаты, которые являются дубликатами, так что вводятся только новые результаты. & дубликат отбрасывается.

+1

`INSERT ... ON DUPLICATE KEY UPDATE ...` - http: // dev. mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – ajreal 2010-11-27 15:10:30

+0

`INSERT IGNORE` будет вставляться только в том случае, если нет нарушения уникального ключа, иначе ничего не делать. `ON DUPLICATE` обновит еще. `REPLACE` будет удалять/вставлять else. – Konerak 2010-11-27 20:57:05

+0

Я стараюсь избегать оператора `REPLACE`, поскольку он удаляет любое нарушение уникального ключа, а не только те из первичного ключа. – Danosaure 2010-11-28 02:19:04

ответ

1

Если вы можете изменить структуру таблиц базы данных, лучшим способом будет добавление UNIQUE INDEX для столбца или нескольких столбцов, которые вместе однозначно идентифицируют одну запись. Например:

ALTER TABLE ADD table уникальный индекс name (column_one, column_two);

Если таблица уже содержит повторяющиеся записи, попытка изменения приведет к ошибке.В этом случае, вы можете использовать ИГНОРИРУЙТЕ:

ALTER TABLE ИГНОРИРУЙТЕ table ADD UNIQUE INDEX name (column_one, column_two);

Имейте в виду, что создание излишне больших индексов приведет:

    более
  • диск пространство, занимаемое
  • медленные запросы письма (INSERT, UPDATE, DELETE)

http://dev.mysql.com/doc/refman/5.1/en/create-index.html (стр описывает другой способ создания индексов, а также ссылки ALTER TABLE)

0

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

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

0

В этом суть первичных ключей, если вы определяете свои первичные ключи с умом, вам не придется иметь дело с дубликатами, потому что у вас их не будет.

0

Команда INSERT IGNORE ... выполняет именно это, если у вас есть первичный ключ, установленный на вашем столе.

Если у вас еще нет первичного ключа, укажите его имя или идентификатор вашей записи, где одинаковое имя/идентификатор будет указывать на повторяющиеся данные.

0

Все реляционные базы данных позволяют использовать как первичные ключи, так и уникальные ограничения для одной строки.

Так что если у вас есть PERSON стола с person_id колонки и уникальными комбинациями из first_name и last_name столбцов, вы должны сделать person_id первичный ключ и добавить уникальное ограничение на (first_name, last_name). Вы не сможете вставить строку, которая нарушает уникальное ограничение, даже если первичные ключи уникальны.

Смежные вопросы