Подтвердить что ты не робот

# 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`
)

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

4b9b3361

Ответ 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 строк.