键1的重复条目“2147483647”

时间:2011-08-11 11:36:55

标签: mysql

奇怪的问题我似乎无法理解。我在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 ('', '', '', '', '', '')

有人有什么想法吗?

非常感谢!

12 个答案:

答案 0 :(得分:15)

答案 1 :(得分:4)

使用您的代码我收到此错误 - “字段列表”中的未知列'base_price_4a'。 这意味着您正在尝试插入另一个表(可能在另一个模式中),并且该表具有主键INT和AUTO_INCREMENT = 2147483647.。

答案 2 :(得分:4)

2147483647是mysql的最大int值。只需将类型从int更改为bigint。

答案 3 :(得分:2)

您已达到32位整数限制,从而阻止自动增量递增。将您的pk切换为具有更高列长度的bigint应该可以解决问题。

另外,如果你的PK永远不会是负数,那么切换到unsigned int会给你更多的空间。

答案 4 :(得分:2)

尝试将auto_increment列更改为bigint而不是int,然后最大值为'9223372036854775807'或甚至'18446744073709551615'如果使其无符号(无值低于0)。

将Auto_Increment更改为列中的最后一个ID,以便从中断处继续。

请确保不删除auto_increment,否则会继续产生错误。

答案 5 :(得分:1)

您将空字符串插入数字列。据我所知,您还要插入模式中不存在的列。我的猜测是这与你的错误有关。

答案 6 :(得分:1)

签名和未签名的问题

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
  • 的负值
  • 始终对主键使用相同的数据类型

答案 7 :(得分:0)

今天我收到错误duplicate key 2147483647

我认为当我尝试从PhpMyAdmin向数据库中插入记录时出现了,在输入时,我也尝试输入键值,它比当前Next autoindex还要低或者我尝试输入内容例如99999999999999作为关键字段,这导致它将Next autoindex设置为最大值

无论如何,导致erorr是因为该表的Next autoindex2147483647。 我的表是空的,所以我通过这个查询修复了它:

ALTER TABLE table_name AUTO_INCREMENT = 0

如果您的表中包含数据,请将0替换为您的最大键加1

答案 8 :(得分:0)

这是一个数据库问题。检查你的phpmyadmin>你的数据库>结构,你的主键应该在“bigint”中设置,而不仅仅是“int”

答案 9 :(得分:0)

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 ;

答案 10 :(得分:0)

对此有一个很好的解释:http://realtechtalk.com/Duplicate_entry_2147483647_for_key_PRIMARY_MySQL_Error_Solution-2015-articles

本质上,您试图插入一个大于INT支持的最大大小的值,该值实际上是错误中提供给您的数字。

如果要导入数据,则字段之一的值大于INT大小。您还可以将表修改为BIGINT,这样也可以解决该问题(当然,这要付出额外的磁盘空间)。

一个常见的原因是您正在使用一些生成大数/随机数的脚本。您应该添加一些检查以确保大小等于或小于最大最大INT大小2147483647,并且一切都会好起来的。

答案 11 :(得分:-1)

重复'app_user'的重复条目'57147-2147483647'[INSERT INTO user_lookup user_idapp_idapp_user_idspecial_offers,{{ 1}})VALUES('2426569','57147','4009116545',1,1854489853)]