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

Дублируемая запись '2147483647' для ключа 1

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

    CREATE TABLE IF NOT EXISTS `tblbaseprices` (
  `base_id` bigint(11) NOT NULL auto_increment,
  `base_size` int(10) NOT NULL default '0',
  `base_label` varchar(250) default NULL,
  `base_price_1a` float default NULL,
  `base_price_2a` float default NULL,
  `base_price_3a` float default NULL,
  `base_price_1b` float default NULL,
  `base_price_2b` float default NULL,
  `base_price_3b` float default NULL,
  `site_id` int(11) default NULL,
  PRIMARY KEY  (`base_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=134 ;

Последний base_id, который у меня есть, равен 132. Я предполагаю, что несколько записей были удалены, чтобы auto_increment был установлен на 134, как вы можете видеть. Я пытаюсь запустить следующий оператор SQL, и когда я это сделаю, я получаю сообщение об ошибке "Дублировать запись" 2147483647 "для ключа 1".

INSERT INTO tblbaseprices (site_id, base_size, base_price_1a, base_price_2a, base_price_3a, base_price_4a) VALUES ('', '', '', '', '', '')

Есть ли у кого-нибудь идеи?

Большое спасибо!

4b9b3361

Ответ 1

С вашим кодом я получил эту ошибку - Неизвестный столбец "base_price_4a" в "списке полей". Это означает, что вы пытаетесь вставить в другую таблицу (возможно, в другую схему), и эта таблица имеет первичный ключ INT и AUTO_INCREMENT = 2147483647.

Ответ 3

2147483647 - наибольшее значение int для mysql. Просто измените тип от int до bigint.

Ответ 4

вы попали в 32-разрядное целочисленное ограничение, тем самым предотвращая увеличение инкремента. переключение вашего pk на bigint с более высокой длиной столбца должно решить проблему.

Кроме того, если ваш ПК никогда не будет отрицательным, переключение на unsigned int должно дать вам больше места.

Ответ 5

Попробуйте изменить столбец auto_increment на bigint вместо int, тогда максимальное значение будет "9223372036854775807" или даже "18446744073709551615", если вы сделаете его без знака (без значений ниже 0).

Измените свой Auto_Increment на последний id в столбце, чтобы он продолжался там, где он остановился.

Убедитесь, что вы не удаляете auto_increment, иначе он будет продолжать вызывать ошибку.

Ответ 6

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

Ответ 7

подписанный и неподписанный номер

alter table tblbaseprices
modify column site_id int(10) unsigned NOT NULL;

ссылка - http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html

  • убедитесь, что неподписанный для внешнего ключа (в данном случае может быть site_id)
  • это может быть вызвано триггером,
  • нет int(11), максимальное значение может быть int(10)
  • нет необходимости разрешать отрицательное значение для ID
  • для последовательного использования одного и того же типа данных для первичного ключа

Ответ 8

Сегодня я получил ошибку duplicate key 2147483647

Я думаю, что это получилось, когда я попытался вставить запись в базу данных из PhpMyAdmin, во время ввода текста я также попытался ввести значение ключа, и он был ниже, чем текущий Next autoindex, или я попытался ввести что-то вроде 99999999999999 как ключевое поле, и это заставило его установить Next autoindex максимум

Во всяком случае, erorr был вызван, потому что Next autoindex был 2147483647 для этой таблицы. Моя таблица была пуста, поэтому я исправил ее по этому запросу:

ALTER TABLE table_name AUTO_INCREMENT = 0

, если ваша таблица содержит данные, затем замените 0 на ваш максимальный ключ плюс 1

Ответ 9

это проблема с базой данных. проверьте структуру phpmyadmin > your DB > , ваш первичный ключ должен быть установлен в "bigint", а не просто "int"

Ответ 10

CREATE TABLE IF NOT EXISTS `tblbaseprices` (
  `base_id` bigint(11) NOT NULL auto_increment,
  `base_size` int(10) NOT NULL default '0',
  `base_label` varchar(250) default NULL,
  `base_price_1a` float default NULL,
  `base_price_2a` float default NULL,
  `base_price_3a` float default NULL,
  `base_price_1b` float default NULL,
  `base_price_2b` float default NULL,
  `base_price_3b` float default NULL,
  `site_id` int(11) default NULL,
  PRIMARY KEY  (`base_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=134 ;

Ответ 11

Дублирующая запись '57147-2147483647' для ключа 'app_user' [INSERT INTO user_lookup (user_id, app_id, app_user_id, special_offers, ip_address) VALUES ('2426569', '57147 ',' 4009116545 ', 1, 1854489853)]