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 больше не поддерживается.

Ссылка

WuHoUnited
источник
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
34

Просто напишите этот запрос в вашей базе данных phpmyadmin.

ALTER TABLE TableName ADD UNIQUE (FieldName)

Например: ALTER TABLE user ADD UNIQUE (email)

Ризван Шамшер Каим Хани
источник
16

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

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);
ypercubeᵀᴹ
источник
7

CREATE UNIQUE INDEX foo ON table_name (field_name)

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

Zulan
источник
4

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

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

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

MKA
источник
2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

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

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

INSERT IGNORE INTO mytable ....
user3772326
источник
1

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

alter ignore table ioni_groups add unique (group_name);
KARTHIKEYAN.A
источник
Но удаляет все дубликаты, включая те, которые находятся за пределами столбцов
Biasi Wiga