Что вызывает дублирование PK в MySQL? - PullRequest
0 голосов
/ 13 марта 2012

До сих пор я сталкивался с этим довольно много раз, но до сих пор не понимаю (мои внутренние навыки MySQL равны нулю).

Я знаю, что это, вероятно, PEBKAC , но попытка повторить поведение вручную приводит к ошибке (автоинкремент).

CREATE TABLE `foo_bar` (
  `id` int(12) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(12) unsigned DEFAULT NULL,
  `order_id` int(12) unsigned DEFAULT NULL,
  `email_address` varchar(50) DEFAULT NULL,
  `mobile_number` varchar(20) DEFAULT NULL,
  `message` longtext NOT NULL,
  `message_received` int(12) unsigned DEFAULT NULL,
  `failed_to_send` tinyint(1) unsigned DEFAULT NULL,
  `fraudulent_activity` tinyint(1) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=ARCHIVE DEFAULT CHARSET=utf8;

Ответы [ 2 ]

0 голосов
/ 13 марта 2012

Хотя ответ на вопрос «что вызвало это» не пришел, REPAIR TABLE устраняет проблему.

Отвечая на это, я могу закрыть вопрос.

0 голосов
/ 13 марта 2012

Когда ваша программа вставляет строку в базу данных, она должна предоставить NULL в качестве значения для автоинкрементного поля:

CREATE TABLE  `customers` (
    `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `name` VARCHAR( 128 ) NOT NULL
) ENGINE = MYISAM ;


INSERT INTO  `customers` ( `id` , `name` )
VALUES ( NULL ,  'Customer 1' ), ( NULL ,  'Customer 2' );

Если вы попытаетесь вставить определенное значение в поле id, MySQL выдаст ошибку:

SQL query: 

    INSERT INTO  `customers` ( `id` , `name` )
    VALUES ( '1',  'Customer 3' );

MySQL said: 
#1062 - Duplicate entry '1' for key 'PRIMARY' 
...