首先,我看到很多其他人发布了这样的帖子,但答案并不适合我的具体案例。 为了防止我只用了几个月的时间来研究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改成另一个地方吗?
非常感谢任何帮助
答案 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
可能还有其他人。