一尘不染

错误1062(23000):密钥'PRIMARY'的重复条目'2147483647'

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更改到另一个地方吗?

非常感谢任何帮助


阅读 178

收藏
2021-03-10

共1个答案

一尘不染

INT最大符号值为2147483647。大于该数字的任何数字都会被截断为该值。您需要做的是将该列更改为a
varchar(20),该列最多可以包含20个字符的字符串,因为银行卡号是字符串,而不是实际的数字(您不对进行数学运算)。您还应删除AUTO_INCREMENT该值,因为这不是您要递增的值。

2021-03-10