mysql | mysql | PK 重复条目 - 非 PK 值更改已修复问题 - 为什么?

标签 mysql csv import composite-primary-key

问题

当我尝试导入 CSV 文件时,我收到 key “PRIMARY”的重复条目“x-x-xx-x-x-x” - PK 错误。

PK 本身是两个连接的 varchar。据我所知,连接永远不会重复。

我的第一个想法是,varchar 的长度可能不足以满足两个键的需要,而复合键可以只使用一个键的长度。因此,我更改了这两个值,使其适合这样的字符长度(10 到 16),但是……没有成功。同样的错误。

但是后来事情变得很奇怪:

我已将所有 value 值编辑为 1.0(只是为了好玩)。 突然之间,整个导入工作没有任何警告。

但是……怎么办?更重要的是为什么?

该值如何导致重复条目“1-b-21-1-b-20”用于键“PRIMARY”错误,当它们甚至不是(复合)PK?

文件

原始文件已超过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 ...

最佳答案

首先,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

所以这不是导致任何错误的值,而是重复的键。

关于mysql | mysql | PK 重复条目 - 非 PK 值更改已修复问题 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56391470/

相关文章:

javascript - VSCode 在导入自动完成时添加 .js 扩展名

php - 使用 php 将 csv 导入 mysql 并

csv - 从Jmeter中的CSV文件中随机选择

python - 使用 python xlrd 将 xlsx 文件的单列写入 csv

java - 如何在 JSP 中使用我自己的类,这是一个好方法吗?

php - Json 与 PHP mysql 和 Jquery

php - 如何在mysql中显示所需的列?

php - MySQL和PHP查询date=$date问题

php - 如何按时间范围从观看开始时间和观看持续时间获取观众?

python - Pandas 用正则表达式读取 csv