mysql | Дублирующая запись для PK - Исправлена ​​проблема не изменения значения PK - Почему? - PullRequest
0 голосов
/ 31 мая 2019

Выпуск

Когда я пытаюсь импортировать файл CSV, я получаю Duplicate entry 'x-x-xx-x-x-x' for key 'PRIMARY' ошибки для ПК.

Сам ПК представляет собой два концинированных varchar s. И, насколько я могу судить, они никогда не дублируются.

Моя первая идея состояла в том, что, возможно, длина varchar будет недостаточной для обоих ключей, а составной ключ может просто использовать длину одного ключа. Таким образом, я изменил оба значения, которые должны соответствовать даже такой длине символа (от 10 до 16) и… безуспешно. Та же ошибка.

Но тогда стало странно:

Я отредактировал (просто для удовольствия) все value -значения в 1.0. И вдруг весь импорт заработал без предупреждения.

Но ... как? И важнее почему?

Как может значение, вызывающее ошибку Duplicate entry '1-b-21-1-b-20' for key 'PRIMARY', когда они даже не являются частью (составного) ПК?

Файлы

Исходные файлы имеют более 5000.

Я сократил два примера CSV-файлов до единственных выдающих:

Суть | CSV - 2 файла | 1 рабочий | 1 выдан

Таблица:

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 ...

1 Ответ

1 голос
/ 31 мая 2019

Прежде всего, первичный ключ, определенный в запросе 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

Так что это не значение, вызывающее какие-либо ошибки, это дубликаты ключей.

...