Ошибка MySQL - # 1062 - Дублирующая запись '' для ключа 2
Я пытаюсь вставить огромный список пользователей в базу данных MySQL, но каждый раз, когда я пытаюсь, я получаю ошибку:
#1062 - Duplicate entry '' for key 2
Это дает мне это, потому что второй столбец заполнен довольно большим количеством записей, поэтому после того, как он вставил одну пустую запись в столбец 2, он не позволит мне добавить еще один. Однако, когда я добавил большую часть списка вчера, я не получил эту ошибку, даже если многие записи, которые я добавил вчера, также имеют пустую ячейку в столбце 2. Что происходит?
Это код sql для вставки 1 записи. Остальные следуют в том же формате:
INSERT INTO users
(`id`,`title`,`firstname`,`lastname`,`company`,`address`,`city`,`county`
,`postcode`,`phone`,`mobile`,`category`,`email`,`password`,`userlevel`)
VALUES
('','','John','Doe','company','Streeet','city','county'
,'postcode','phone','','category','[email protected]','','');
Ответы
Ответ 1
В дополнение к ответу Sabeen:
Первый идентификатор столбца - ваш первичный ключ.
Не вставляйте ''
в первичный ключ, но вместо этого вставляйте нуль.
INSERT INTO users
(`id`,`title`,`firstname`,`lastname`,`company`,`address`,`city`,`county`
,`postcode`,`phone`,`mobile`,`category`,`email`,`password`,`userlevel`)
VALUES
(null,'','John','Doe','company','Streeet','city','county'
,'postcode','phone','','category','[email protected]','','');
Если это ключ автоинкремента, это устранит вашу проблему.
Если не сделать id
ключ автоинкремента и всегда вставлять null
в него, чтобы вызвать автоинкремент.
У MySQL есть настройка для автоинкрементных ключей только на вкладке null
или на обеих вставках 0
и null
. Не рассчитывайте на этот параметр, потому что ваш код может сломаться, если вы измените сервер.
Если вы вставляете null
, ваш код всегда будет работать.
Смотрите: http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
Ответ 2
Кажется, что второй столбец задан как уникальный индекс. Если вам это не нужно, удалите его, и ваши ошибки исчезнут. Возможно, вы добавили индекс по ошибке, и поэтому вы видите ошибки сегодня и не видели их вчера.
Ответ 3
Проверьте свой индекс таблицы.
Если это поле получило индекс (например, индекс дерева B +). В это время запрос обновления или вставки вызывает такие ошибки.
Удалите индексирование, а затем попытайтесь запустить тот же запрос.
Ответ 4
Я получил эту ошибку, когда попытался установить столбец как уникальный, когда в столбце были уже дублированные данные или если вы попытаетесь добавить столбец и установить его как уникальное, когда в таблице уже есть данные.
У меня была таблица с 5 строками, и я попытался добавить уникальный столбец, и это не получилось, потому что все 5 из этих строк будут пустыми и, следовательно, не уникальными.
Я создал столбец без уникального набора индексов, затем заполнил данные и установил их как уникальные, и все сработало.
Ответ 5
Как было сказано, у вас есть уникальный индекс.
Однако, когда я добавил большую часть списка вчера, я не получил эту ошибку, даже если многие записи, которые я добавил вчера, также имеют пустую ячейку в столбце 2. Что происходит?
Это означает, что все эти записи содержат значение NULL
, а не пустую строку ''
. Mysql позволяет вам иметь несколько значений NULL
в уникальных полях.
Ответ 6
Ошибка "Дублировать запись" 338620-7 "для ключа 2" по запросу. База данных по умолчанию
Для этой ошибки:
set global sql_slave_skip_counter=1;
start slave;
show slave status\G
Это сработало для меня
Ответ 7
вы можете попробовать добавить
$db['db_debug'] = FALSE;
в "вашем файле базы данных".php после этого вы можете изменить свою базу данных по своему усмотрению.
Ответ 8
-
Сначала сбрасываем первичный ключ: (Первичным ключом является ваша ответственность)
ALTER TABLE Persons DROP PRIMARY KEY ;
-
Затем сделайте все вставки:
-
Добавьте новый первичный ключ так же, как и до удаления:
ALTER TABLE Persons ADD PRIMARY KEY (P_Id);