У меня есть таблица базы данных MySQL с двумя интересующими меня столбцами. По отдельности каждый из них может иметь дубликаты, но никогда не должно быть дубликата ОБЕИХ, имеющих одинаковое значение.
stone_id
могут быть дубликаты при условии, что каждое upsharge
название отличается, и наоборот. Но скажем, например, stone_id
= 412 и upcharge_title
= "сапфир", что комбинация должна встречаться только один раз.
Хорошо:
stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "ruby"
Это НЕ нормально:
stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "sapphire"
Есть ли запрос, который найдет дубликаты в обоих полях? И если возможно, есть ли способ настроить мою базу данных, чтобы этого не допустить?
Я использую MySQL версии 4.1.22
источник
Я счел полезным добавить индекс unqiue с помощью «ALTER IGNORE», который удаляет дубликаты и обеспечивает выполнение уникальных записей, которые звучат так, как вы хотели бы. Итак, синтаксис будет таким:
Это эффективно добавляет уникальное ограничение, означающее, что у вас никогда не будет повторяющихся записей, а IGNORE удаляет существующие дубликаты.
Вы можете узнать больше о ALTER IGNORE здесь: http://mediakey.dk/~cc/mysql-remove-duplicate-entries/
Обновление: @Inquisitive сообщил мне, что это может не работать в версиях MySql> 5.5:
Обновление -
ALTER IGNORE
удалено в 5.7Из документов
Один из разработчиков MySQL предлагает две альтернативы :
INSERT IGNORE
, например:Но в зависимости от размера вашего стола это может оказаться непрактичным.
источник
Вы можете найти такие дубликаты ..
источник
Чтобы найти дубликаты:
Чтобы избежать этого в будущем, создайте составной уникальный ключ для этих двух полей.
источник
Между прочим, составное уникальное ограничение для таблицы в первую очередь предотвратило бы это.
(Это действительный T-SQL. Не уверен насчет MySQL.)
источник
это сообщение SO помогло мне, но я тоже хотел знать, как удалить и сохранить одну из строк ... вот PHP-решение для удаления повторяющихся строк и сохранения одной (в моем случае было всего 2 столбца, и он находится в функция очистки повторяющихся ассоциаций категорий)
(ограничение NUM_DUPES - 1) - это то, что сохраняет одну строку ...
Спасибо всем
источник
ALTER IGNORE TABLE table ADD UNIQUE INDEX index_name(stone_id, charge_title)
удалит повторяющиеся строки, оставив только одну уникальную пару.