# 1062 - Дублируемая запись '' для ключа 'unique_id' При попытке добавить UNIQUE KEY (MySQL)
У меня есть ошибка в MySQL при попытке добавить UNIQUE KEY. Вот что я пытаюсь сделать. У меня есть столбец "unique_id", который является VARCHAR (100). В таблице нет индексов. Я получаю эту ошибку:
#1062 - Duplicate entry '' for key 'unique_id'
Когда я пытаюсь добавить ключ UNIQUE. Вот скриншот о том, как я настраиваю его в phpMyAdmin:
![enter image description here]()
Вот запрос MySQL, который генерируется phpMyAdmin:
ALTER TABLE `wind_archive` ADD `unique_id` VARCHAR( 100 ) NOT NULL FIRST ,
ADD UNIQUE (
`unique_id`
)
У меня была эта проблема в прошлом и я никогда не разрешал ее, поэтому я просто перестроил таблицу с нуля. К сожалению, в этом случае я не могу этого сделать, поскольку в таблице уже много записей. Спасибо за вашу помощь!
Ответы
Ответ 1
Ошибка говорит все:
Duplicate entry ''
Итак, запустите следующий запрос:
SELECT unique_id,COUNT(unique_id)
FROM yourtblname
GROUP BY unique_id
HAVING COUNT(unique_id) >1
Этот запрос также покажет вам проблему
SELECT *
FROM yourtblname
WHERE unique_id=''
Это покажет вам, где есть значения, которые имеют дубликаты. Вы пытаетесь создать уникальный индекс в поле с дубликатами. Сначала вам нужно будет разрешить дубликаты данных, а затем добавить индекс.
Ответ 2
Это третий раз, когда я ищу решение этой проблемы, поэтому для справки я размещаю здесь ответ.
В зависимости от данных мы можем использовать ключевое слово IGNORE с помощью команды Alter. Если указано IGNORE, для строк с дубликатами по уникальному ключу используется только первая строка. Остальные конфликтующие строки удаляются. Неверные значения усекаются до ближайшего подходящего значения.
Расширение ключевого слова IGNORE
для MySQL, похоже, содержит ошибку в версии InnoDB в некоторой версии MySQL.
Вы всегда можете конвертировать в MyISAM, IGNORE-ADD индекс, а затем конвертировать обратно в InnoDB
ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;
Обратите внимание: если у вас есть ограничения по внешнему ключу, это не сработает, вам придется сначала удалить их и добавить их позже.
Ответ 3
Сделайте unique_id
NULL
из NOT NULL
, и он решит вашу проблему
Ответ 4
select ID from wind_archive
where ID not in (select max(ID) from wind_archive group by unique_id)
и это то, что вы должны удалить из таблицы, прежде чем успешно добавить уникальный ключ.
это также работает для добавления уникального ключа с 2 или более столбцами.
таких как -
delete from wind_archive
where ID in (
select * from (select ID from wind_archive where ID not in (
select max(ID) from wind_archive group by lastName, firstName
) ORDER BY ID
) AS p
);
Ответ 5
Я получал ту же ошибку (Duplicate entry '' для key 'unique_id') при попытке добавить новый столбец как уникальный "после". Я уже создал таблицу, содержащую только имена музеев. Я хотел вернуться и добавить уникальный код для каждого имени музея, с намерением вставить значения кода по одному. Плохое планирование таблиц с моей стороны.
Моим решением было добавить новый столбец, не сделав его уникальным; затем вводил данные для каждого кода по одной строке за раз; а затем изменение структуры столбцов, чтобы сделать его уникальным для будущих записей. К счастью, было всего 10 строк.