首先,我已经看到许多其他这样的帖子,但是答案不适用于我的特殊情况。以防万一我几个月才学习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更改到另一个地方吗?
非常感谢任何帮助
INT的最大符号值为2147483647。大于该数字的任何数字都会被截断为该值。您需要做的是将该列更改为a varchar(20),该列最多可以包含20个字符的字符串,因为银行卡号是字符串,而不是实际的数字(您不对进行数学运算)。您还应删除AUTO_INCREMENT该值,因为这不是您要递增的值。
INT
varchar(20)
AUTO_INCREMENT