2015-10-27 2 views
7

Здесь я хотел бы объяснить мою проблему,Как создать уникальный индекс для существующей таблицы в MySQL, который содержит запись

Мне нужно создать уникальный индекс в моей существующей таблице, а таблица содержит много записей.

Я пытался выполнить этот код

CREATE UNIQUE INDEX empid_name ON employee (importcompany_id, employee_id, name, relationship); 

, но я получаю сообщение об ошибке, как

#1062 - Duplicata du champ '0-Emp ID-Member Name-Relationship' pour la clef 'empid_name' 

Помогите мне разобраться с этой проблемой, мне нужно сделать поля уникальные

Обновлено:

Причина установления г эти поля Уникальна

На самом деле у меня есть таблица, как этот

id company_ID Employee_ID Name  Relationship Dob  Age Gender  
1 EMPL  00001  Choodamani Spouse  11-Aug-66 49 Female    
2 EMPL  00001  Komala  Mother  30-Oct-39 76 Female    
3 EMPL  00001  Varshini Daughter 29-Apr-04 11 Female    
4 EMPL  00001  Vasudevan Employee 15-Jul-62 53 Male  
5 EMPL  00002  Siddharth Son   1-Jun-00 15 Male    
6 EMPL  00002  Poongavanam Mother  21-Oct-39 76 Female    
7 EMPL  00002  Aruna  Spouse  16-Sep-68 47 Female    
8 EMPL  00002  Abirami  Daughter 7-May-97 18 Female    
9 EMPL  00002  Murali  Employee 7-Oct-67 48 Male 

если есть вставить данные, как это,

id company_ID Employee_ID Name  Relationship Dob  Age Gender  
    1 EMPL  00001  Choodamani Spouse  11-Aug-70 45 Female    
    2 EMPL  00001  Nirmal  Son  30-Oct-39 76 Female 

эта вставка или обновление выполняется за счет импорта с помощью Excel лист

+1

Вам необходимо очистить данные, чтобы получить таблицу без дубликатов записей. После этого у вас будет возможность добавить UNIQUE INDEX. –

+0

есть ли способ сделать это, не удаляя данные ???? – Nodemon

+1

Я этого не понимаю. Одна из возможностей - иметь уникальные наборы данных, а другая возможность - дублировать записи в вашей таблице. Если вы хотите добавить UNIQUE INDEX constaint, вы не должны иметь повторяющиеся записи в своей таблице. Пожалуйста, прочитайте https://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html –

ответ

9
  1. Если вы хотите иметь уникальный индекс empid_name на столе сотрудника с колоннами (importcompany_id, employee_id, name, relationship). Затем вы должны удалить существующие дубликаты данных.

Простой способ сделать это - добавить индекс UNIQUE на 4 столбца. Когда вы пишете оператор ALTER, укажите ключевое слово IGNORE. Например:

ALTER IGNORE TABLE `employee` ADD UNIQUE INDEX(importcompany_id, employee_id, name, relationship); 

Это приведет к удалению всех повторяющихся строк. В качестве дополнительной выгоды будущие ВСТАВКИ, которые являются дубликатами, будут ошибочными. Как всегда, вы можете взять резервную копию, прежде чем запускать что-то вроде этого.

  1. or Добавить первичный ключ в таблицу, тогда вы можете легко удалить дубликаты из своей таблицы. Затем добавьте уникальный индекс.
1

Использование alter table для этого

ALTER TABLE `employee` ADD UNIQUE INDEX(importcompany_id, employee_id, name, relationship); 

См. this для получения дополнительной информации.

+0

ошибка при выполнении этого – Nodemon

+0

May i now, в чем ошибка? –

+0

Я отредактировал свой ответ, пожалуйста, проверьте, что –

1

Самое простое решение, чтобы добавить новый столбец под названием что-то вроде UniqueID

Если вам не нужно по любой другой причине, вы можете просто установить его до AutoIncrement (AI): оно не будет иметь смысла, но по крайней мере он будет уникальным.

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

+0

см. Выше. Я обновил свой вопрос. Это причина для этого. – Nodemon

+0

Если я правильно понял, ваш импорт изменит DOB (и, очевидно, возраст) для Choodamani и попытается вставить запись для Nirmal. (Не знаю, как Nirmal является женским сыном в возрасте 76 лет, но это еще одна проблема!) – user3600150

+0

Таким образом, ваш импорт НЕ должен использовать уникальный идентификатор ... скорее, выберите в соответствующих полях, укажите, является ли это INSERT или UPDATE, и разрешите таблицу для определения правильного идентификатора (это то, что делает AutoIncrement) – user3600150