Дублируемая запись '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 ('', '', '', '', '', '')
Есть ли у кого-нибудь идеи?
Большое спасибо!
Ответы
Ответ 1
С вашим кодом я получил эту ошибку - Неизвестный столбец "base_price_4a" в "списке полей".
Это означает, что вы пытаетесь вставить в другую таблицу (возможно, в другую схему), и эта таблица имеет первичный ключ INT и AUTO_INCREMENT = 2147483647.
Ответ 2
2^31 − 1 = 2,147,483,647
Число 2,147,483,647 является... максимальным значением для 32-разрядного целого числа со знаком при вычислении
Ответ 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)]