MySQL - сделать существующее поле уникальным


155

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

Как сделать так, чтобы в этом поле принимались только уникальные значения?

Ответы:


293
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

Для MySQL 5.7.4 или новее:

ALTER TABLE mytbl ADD UNIQUE (columnName);

Начиная с MySQL 5.7.4, предложение IGNORE для ALTER TABLE удалено, и его использование вызывает ошибку.

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

Ссылка


62
+1 If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. Документы
Скрам Мейстер

1
Есть ли способ сказать ему, чтобы удалить строки на основе определенных критериев? Или вам нужно выполнить некоторую предварительную обработку перед тем, ALTERкак это сделать.
CorsiKa

7
ALTER IGNOREможет по-прежнему выдавать ошибку Duplicate на MySQL версии> 5.5 и на InnoDB для безопасности ваших данных. Если вы просто уверены, что сохранение первой из дублированных строк - это правильно, попробуйте set session old_alter_table=1. Не забудьте вернуть его обратно. mysqlolyk.wordpress.com/2012/02/18/…
michaelliu

2
Для тех, кто сталкивается с этой проблемой, используя 5.6.7 или выше, IGNORE больше не поддерживается. moredocs Я думаю, что способ сделать это сейчас - сначала убедиться, что у вас нет дубликатов, нет?
Уильям Т. Маллард

1
Обязательно сделайте резервную копию таблицы, прежде чем выполнять этот запрос. Он удалит все строки, кроме первой, если имя столбца имеет одинаковые значения или пусто.
stable_daddy


16

Если вы также хотите назвать ограничение, используйте это:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

7

CREATE UNIQUE INDEX foo ON table_name (field_name)

Вы должны удалить повторяющиеся значения в этом столбце перед выполнением этого sql. Любое существующее дублирующее значение в этом столбце приведет к ошибке mysql 1062


4

Самый простой и быстрый способ будет с таблицей структуры phpmyadmin.

Используйте PHPMYADMIN ADMIN PANEL!

Там это на русском языке, но на английском языке версия должна быть такой же. Просто нажмите уникальную кнопку. Также оттуда вы можете сделать свои столбцы ПЕРВИЧНЫМИ или УДАЛИТЬ.


2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

правильный ответ

часть вставки

INSERT IGNORE INTO mytable ....

1

Этот код решает нашу проблему, чтобы установить уникальный ключ для существующей таблицы

alter ignore table ioni_groups add unique (group_name);

Но удаляет все дубликаты, включая те, которые находятся за пределами столбцов
Biasi Wiga
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.