MYSQL -无法解决重复错误

kq0g1dla  于 2023-08-02  发布在  Mysql
关注(0)|答案(1)|浏览(101)

尝试完成项目的第一步,在该步骤中,我使用

CREATE TABLE Customers (customerID SMALLINT,firstName VARCHAR(25),lastName VARCHAR(25),street VARCHAR(50),city VARCHAR(50),state VARCHAR(25),zipCode VARCHAR(10),telephone VARCHAR(15),PRIMARY KEY (customerID));

字符串
然后,我应该从应用程序上传一个csv文件。

LOAD DATA INFILE "/home/codio/workspace/customers.csv" INTO TABLE Customers FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';


或者是

LOAD DATA INFILE '/home/codio/workspace/customers.csv' INTO TABLE Customers FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';


但这两个都提供了错误代码

ERROR 1062 (23000): Duplicate entry '32767' for key 'PRIMARY'


打开文件并搜索32767只会在电话线中产生一个结果。没有重复。DELETE FROM CustomersDROP TABLE Customers。两次确认表为空

mysql> SELECT * FROM Customers;
Empty set (0.00 sec)


我已经为此争论了几个小时,不知道还能做什么。最糟糕的是我觉得我没有做错什么。但这就是你的用武之地。祈祷吧
我已经删除了表,清除了表,重新创建了表,在某一点上,甚至创建了一个全新的文件。

h6my8fg2

h6my8fg21#

您已将主键定义为

customerID SMALLINT

字符串
这意味着它只能保持-32768和32767之间的值。当你使用LOAD DATA语句时,任何超出这个范围的值都会被截断,就像LOAD DATA语句手册中提到的那样:

  • 无效值会产生警告而不是错误,并会转换为列数据类型的“最接近”有效值。示例:
  • [...]
  • 超出范围的数值或时态值将被剪裁到列数据类型的范围的最近端点。

这意味着customerId值大于32767的第一个新行将被裁剪为32767。customerId值大于32767的第二个新行也被剪切为32767,导致主键冲突。
解决方案是为customerId列使用更大的整数类型,如INTBIGINT

相关问题