当我尝试导入CSV文件时,我收到PK的Duplicate entry 'x-x-xx-x-x-x' for key 'PRIMARY'
错误。
PK本身是两个紧缩的 varchar 。据我所知,伪造永远不会重复。
我的第一个想法是, varchar 的长度可能不足以满足两个键的需要,而复合键只能使用一个键的长度。因此,我更改了两个值,即使该字符长度也应适合(10到16),并且…没有成功。同样的错误。
但是随后变得奇怪:
我已经将所有value
值(出于娱乐目的)编辑为1.0
。
突然之间,整个导入工作都没有任何警告。
但是……如何?还有更重要的原因吗?
当值甚至不属于(复合)PK时,该值怎么会引起Duplicate entry '1-b-21-1-b-20' for key 'PRIMARY'
错误?
原始文件超过5000个。
我将两个示例CSV文件减少为唯一的发行文件:
Gist | CSV - 2 Files | 1 working | 1 issued
CREATE TABLE `route_neighbours` (
`start` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL,
`end` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL,
`distance` decimal(10,1) NOT NULL,
PRIMARY KEY (`start`,`end`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
2002:2: Duplicate entry '1-j-23-1-i-23' for key 'PRIMARY'
2003:2: Duplicate entry '1-b-17-1-b-18' for key 'PRIMARY'
2004:2: Duplicate entry '1-b-18-1-b-19' for key 'PRIMARY'
2005:2: Duplicate entry '1-b-19-1-b-20' for key 'PRIMARY'
2006:2: Duplicate entry '1-b-20-1-b-21' for key 'PRIMARY'
2007:2: Duplicate entry '1-b-21-1-b-22' for key 'PRIMARY'
2008:2: Duplicate entry '1-b-22-1-b-23' for key 'PRIMARY'
2009:2: Duplicate entry '1-b-23-1-b-24' for key 'PRIMARY'
2010:2: Duplicate entry '1-b-24-1-b-23' for key 'PRIMARY'
2011:2: Duplicate entry '1-b-23-1-b-22' for key 'PRIMARY'
2012:2: Duplicate entry '1-b-22-1-b-21' for key 'PRIMARY'
2013:2: Duplicate entry '1-b-21-1-b-20' for key 'PRIMARY'
2014:2: Duplicate entry '1-b-20-1-b-19' for key 'PRIMARY'
2015:2: Duplicate entry '1-b-19-1-b-18' for key 'PRIMARY'
2016:2: Duplicate entry '1-b-18-1-b-17' for key 'PRIMARY'
2017:2: Duplicate entry '1-b-17-1-b-16' for key 'PRIMARY'
2018:2: Duplicate entry '1-b-16-1-b-15' for key 'PRIMARY'
2019:2: Duplicate entry '1-b-15-1-b-14' for key 'PRIMARY'
2020:2: Duplicate entry '1-b-14-1-b-13' for key 'PRIMARY'
2021:2: Duplicate entry '1-b-13-1-b-12' for key 'PRIMARY'
2022:2: Duplicate entry '1-b-12-1-b-11' for key 'PRIMARY'
2023:2: Duplicate entry '1-b-11-1-b-10' for key 'PRIMARY'
... and much more lines of these error ...
答案 0 :(得分:0)
首先,由于定义的字段不存在,CREATE TABLE
查询中定义的主键不存在。
此外,CSV确实具有重复的记录,例如:1-bl-1;1-x-1;10.0
。
使用bash,您可以将唯一行与所有行进行计数:
# All lines: 1568
cat Issued.csv | wc -l
# Unique lines: 1531
cat Issued.csv | sort | uniq | wc -l
因此,不是导致任何错误的值,而是重复的键。