【发布时间】:2013-12-07 13:52:14
【问题描述】:
首先,我已经看到很多其他类似的帖子,但是答案不适用于我的特定案例。 以防万一我只有几个月的 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换个地方?
非常感谢任何帮助
【问题讨论】:
-
'2147483647' 是已签名
INT的最大值,要么将你的列强制转换为UNSIGNED INT,要么使用BIGINT列。 See the manual for the limits。另外,请考虑您的列是否实际上应该是 autoinc。诠释。0123012301230123中的前缀0可能会让我认为 char 列可能更适合它的用途。 -
请注意,自动增量只有在您没有为该列提供任何值时才有效。
-
@Wrikken 很好,我去看看! Tnks .
-
@nos tnks 将我还押
-
@Wrikken UNSIGNED 仅用于 INT 对吗?在这种情况下,我使用的是 VARCHAR,实际上是在我第一次使用 INT 但出现错误时。然后我更改为 VARCHAR。当然我需要显示 0,以 0 开头的卡片很少。