2015-12-02 2 views
0

У меня есть набор данных со списком названий стран, а названия стран повторяются один раз для «Мужчины», а затем снова для «Женщины».mysql workbench duplicate key error

Например:

c_name  gender 
China  M 
Greece  M 
Algeria M 
China  F 
Greece  F 
Algeria F 

Когда я создаю таблицу и импортировать данные из файла CSV, я получаю «дубликат ключа» ошибку. Мне интересно, если это имеет какое-либо отношение к настройкам двигателя? Любые идеи, как это можно решить? (Я знаю, что это работает, потому что мой друг заставил его работать на своем Mac, и у нее не было выбора «Составить» или «Двигатель» при создании своих столов, но я нахожусь в Windows)

EDIT: Вот как я создаю таблицу:

CREATE TABLE dbs. enrollment (

e_id INT NOT NULL,

c_name VARCHAR (45) NOT NULL,

gender УАКСНАК (45) NULL, то

2001 INT NULL, то

2002 INT NULL, то

2003 INT NULL, то

2004 INT NULL, то

2005 INT NULL, то

2006 INT NULL, то

2007 INT NULL, то

2008 INT NULL, то

2009 INT NULL,

2010 INT NULL, то

первичный ключ (e_id, c_name));

+0

Можете ли вы включить определение таблицы? Какие индексы у вас есть на столе? – JRD

+0

обновлен! также я не добавил никаких дополнений к индексу, он просто говорит «PRIMARY» «PRIMARY» – katebeckett

+0

Где-то в ваших данных у вас есть пара e_id, c_name, имеющая одинаковые значения более чем в одной строке. – JRD

ответ

0

Ваш друг может установить первичный ключ с c_name в этой таблице, если вы хотите, чтобы изменения, вы можете отменить первичный ключ.

0

Было бы лучше, чтобы ответить, если общий запрос, который используется для вышеизложенного. Я согласен с Уокер Ли.

Если ваш запрос что-то вроде этого ..

CREATE TABLE enrollment (
    c_name VARCHAR(255) NOT NULL, 
    gender VARCHAR(255) NOT NULL, 
    PRIMARY KEY (c_name) 
); 

Вы можете изменить его, удалив основную линию ID, как

CREATE TABLE enrollment (
    c_name VARCHAR(255) NOT NULL, 
    gender VARCHAR(255) NOT NULL 
); 

Надеется, что это решает проблему.

Если данные CSV содержит какой-либо уникальный столбец как ID вы можете использовать его в качестве первичного ключа, как,

CREATE TABLE enrollment (
    e_id INT NOT NULL, 
    gender VARCHAR(255) NOT NULL, 
    PRIMARY KEY (e_id) 
); 

Таблица может иметь только один первичный ключ. Удалить c_name в последней строке и только e_id, как показано ниже

PRIMARY KEY (e_id); 
0

Сочетание e_id и c_name должно быть уникальным. Если нет, вы можете создать дополнительный искусственный первичный ключ для работы.

CREATE TABLE `enrollment` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `e_id` int(11) NOT NULL, 
    `c_name` varchar(45) NOT NULL, 
    `gender` varchar(45) DEFAULT NULL, 
    `2001` int(11) DEFAULT NULL, 
    `2002` int(11) DEFAULT NULL, 
    `2003` int(11) DEFAULT NULL, 
    `2004` int(11) DEFAULT NULL, 
    `2005` int(11) DEFAULT NULL, 
    `2006` int(11) DEFAULT NULL, 
    `2007` int(11) DEFAULT NULL, 
    `2008` int(11) DEFAULT NULL, 
    `2009` int(11) DEFAULT NULL, 
    `2010` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;