#1062-дубликат записи "для ключа" уникальный идентификатор " при попытке добавить уникальный ключ (MySQL)
у меня есть ошибка в MySQL при попытке добавить уникальный ключ. Вот что я пытаюсь сделать. У меня есть столбец под названием "unique_id", который является VARCHAR(100). В таблице не определены индексы. Я получаю эту ошибку:
#1062 - Duplicate entry '' for key 'unique_id'
когда я пытаюсь добавить уникальный ключ. Вот скриншот того, как я настраиваю его в phpMyAdmin:
вот запрос MySQL, который генерируется phpMyAdmin:
ALTER TABLE `wind_archive` ADD `unique_id` VARCHAR( 100 ) NOT NULL FIRST ,
ADD UNIQUE (
`unique_id`
)
у меня была эта проблема в прошлом и никогда не разрешал его, поэтому я просто перестроил таблицу с нуля. К сожалению, в этом случае я не могу этого сделать, так как в таблице уже много записей. Спасибо за помощь!
6 ответов
ошибка говорит все это:
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=''
Это покажет вам, где есть значения, которые имеют дубликаты. Вы пытаетесь создать уникальный индекс для поля с дубликатами. Сначала вам нужно будет разрешить дубликаты данных, а затем добавить индекс.
это 3-й раз, когда я ищу решение этой проблемы, поэтому для справки я размещаю ответ здесь.
в зависимости от данных мы можем использовать ключевое слово IGNORE с командой Alter. Если указан параметр игнорировать, то из строк с дубликатами на уникальном ключе используется только первая строка, остальные конфликтующие строки удаляются. Неправильные значения усекаются до ближайшего приемлемого значения соответствия.
на IGNORE
расширение ключевого слова для MySQL, похоже, имеет ошибка в InnoDB в версии на какой-то версии MySQL.
вы всегда можете конвертировать в MyISAM, игнорировать-добавить индекс, а затем конвертировать обратно в InnoDB
ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;
Примечание. Если у вас есть ограничения внешнего ключа, это не сработает, вам придется сначала удалить их и добавить их позже.
select ID from wind_archive
where ID not in (select max(ID) from wind_archive group by unique_id)
и это то, что вы должны удалить из стола перед Вы успешно добавить уникальный ключ. это также работает для добавления уникального ключа с 2 или более столбцов. такие, как ... --3-->
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
);
Я получал ту же ошибку (дубликат записи " для ключа "unique_id") при попытке добавить новый столбец как уникальный "после" я уже создал таблицу, содержащую только имена музеев. Я хотел вернуться и добавить уникальный код для каждого названия музея, с намерением вставлять значения кода по одному. Плохое планирование стола с моей стороны. Мое решение состояло в том, чтобы добавить новый столбец, не делая его уникальным; затем введите данные для каждого кода по одной строке за раз; а затем измените структура столбцов, чтобы сделать ее уникальной для будущих записей. Повезло, что было всего 10 рядов.
из-за того, что вы пишете в своем запросе, unique_id не будет NULL и предыдущие строки все из них равны null и вы хотите, чтобы этот столбец был уникальным, то после запуска этого запроса у вас есть несколько строк с тем же значением это означает, что этот столбец не уникален, то вы должны изменить unique_id не NULL на unique_id NULL в вашем запросе.