我有一张表格:
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);
我收到了这个错误信息:
如果bank_card是自增的,为什么会出现错误呢?我应该将PK更改到另一个位置吗?ERROR 1062 (23000): Duplicate entry '2147483647' for key 'PRIMARY'
INT
的最大值,如果需要更大的值,则应将列转换为UNSIGNED INT
或者使用BIGINT
列。请参阅手册获取限制信息。此外,您需要考虑您的列是否应该是自增 int 类型。在0123012301230123
中前缀的0
可能会让我认为使用字符列更加适合它所做的事情。 - WrikkenUNSIGNED
只适用于 INT 类型。而且,在这种情况下,CHAR 或 VARCHAR 更加合适。 - Wrikken