ERROR 1062(23000):对于'PRIMARY'键重复输入'2147483647'

时间:2013-12-07 13:52:15

标签: mysql sql

首先,我看到很多其他人发布了这样的帖子,但答案并不适合我的具体案例。 为了防止我只用了几个月的时间来研究SQL,我对此并不了解。

有一张桌子:

CREATE TABLE passenger_details
   (
    bank_card INT(20) NOT NULL AUTO_INCREMENT,
    email VARCHAR(20), 
    mobile INT(15) NOT NULL,
    p_id INT NOT NULL,    
    PRIMARY KEY (bank_card),
    FOREIGN KEY (p_id) REFERENCES passenger(p_id) 
    );

INSERT INTO passenger_details 
VALUES (0123012301230123,'blah_@hotmail.com',0872863492,1234);

select*from passenger_details;
+------------+--------------------+-----------+------+
| bank_card  | email              | mobile    | p_id |
+------------+--------------------+-----------+------+
| 2147483647 | blah_@hotmail.com  | 872863492 | 1234 |
+------------+--------------------+-----------+------+
1 row in set (0.00 sec)  

正如我们所看到的,之前的值,只是在表中出错了。应该是16个数字,而不仅仅是10个,实际上是不同的数字 当我尝试插入新值时:

INSERT INTO passenger_details 
VALUES (1234258431681842,'blah@icloud.com',0895764829,123548);
ERROR 1062 (23000): Duplicate entry '2147483647' for key 'PRIMARY'

如果bank_card是AUTO_INCREMENT,为什么会出错? 我应该把PK改成另一个地方吗?

非常感谢任何帮助

2 个答案:

答案 0 :(得分:5)

INT有一个maximum signed value of 2147483647。任何大于该数字的数字都将被截断为该值。您需要做的是将该列更改为varchar(20),其中包含最多20个字符的字符串,因为银行卡号是字符串而不是实际数字(您不使用数字)。您还应该删除AUTO_INCREMENT,因为这不是您要增加的值。

答案 1 :(得分:0)

有些事情要问自己。这个数字怎么这么大?我没有插入20亿行!

好吧,可能您已经“烧毁”了许多AUTO_INCREMENT id。这可以通过人工方式发生:

INSERT IGNORE ... -- when the insert is ignored (because it the row already exists)
REPLACE
IODKU

可能还有其他人。