Ошибка MySQL - # 1062 - Дублирующая запись '' для ключа 2 - PullRequest
24 голосов
/ 27 мая 2011

Я пытаюсь вставить огромный список пользователей в базу данных MySQL, но каждый раз, когда я пытаюсь, я получаю сообщение об ошибке:

#1062 - Duplicate entry '' for key 2

Это дает мне это, потому что 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','emial@email.co.uk','','');

Ответы [ 8 ]

19 голосов
/ 27 мая 2011

В дополнение к ответу Сабин:

Идентификатор первого столбца - ваш первичный ключ.
Не вставляйте '' в первичный ключ, но вместо этого вставьте ноль.

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','emial@email.co.uk','','');

Если это автоинкрементный ключ, это решит вашу проблему.
Если не сделать id ключом автоинкремента, всегда вставляйте в него null, чтобы вызвать автоинкремент.

В MySQL есть настройка автоинкрементации ключей только при вставке null или при обеих вставках 0 и null. Не рассчитывайте на этот параметр, потому что ваш код может сломаться, если вы смените сервер.
Если вы введете null, ваш код всегда будет работать.

См .: http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

11 голосов
/ 27 мая 2011

Похоже, второй столбец задан как уникальный индекс. Если вам это не нужно, удалите его, и ваши ошибки исчезнут. Возможно, вы добавили индекс по ошибке, и поэтому вы видите ошибки сегодня, а вчера не видели их

2 голосов
/ 01 марта 2014

Я получил эту ошибку, когда попытался установить столбец как уникальный, если в столбце уже были повторяющиеся данные, ИЛИ, если вы попытаетесь добавить столбец и установить его как уникальный, если в таблице уже есть данные.

У меня была таблица с 5 строками, и я попытался добавить уникальный столбец, но это не удалось, потому что все 5 из этих строк были бы пустыми и, следовательно, не уникальными., затем заполнил данные, затем установил их как уникальные, и все заработало.

1 голос
/ 15 мая 2016

вы можете попробовать добавить

$db['db_debug'] = FALSE; 

в «файле вашей базы данных» .php, после этого вы можете изменить базу данных так, как вам нравится.

1 голос
/ 20 апреля 2016

Ошибка 'Дублирующая запись' 338620-7 'для ключа 2' по запросу.База данных по умолчанию

Для этой ошибки:

set global sql_slave_skip_counter=1; 
start slave; 
show slave status\G

Это сработало для меня

1 голос
/ 14 июня 2013

Проверьте ваш индекс таблицы.Если это поле получило индекс (например, индекс дерева B +). В это время запрос на обновление или вставку выдает такие ошибки.

Удалите индексирование и попробуйте запустить тот же запрос.

1 голос
/ 27 мая 2011

Как уже было сказано, у вас есть уникальный индекс.

Однако, когда я вчера добавил большую часть списка, я не получил эту ошибку ни разу, хотя у многих записей, которые я добавил вчера, также есть пустая ячейка в столбце 2.Что происходит?

Это означает, что все эти записи содержат значение NULL, а не пустую строку ''.Mysql позволяет вам иметь несколько NULL значений в уникальных полях.

0 голосов
/ 03 июля 2016
  1. Сначала сбросьте первичный ключ: (Первичный ключ - ваша ответственность)

    ALTER TABLE Persons DROP PRIMARY KEY ;
    
  2. Затем сделайте все вставки:

  3. Добавить новый первичный ключ, как и перед сбросом:

    ALTER TABLE Persons ADD PRIMARY KEY (P_Id);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...