2015-10-27 7 views
7

qui Mi piace di spiegare il mio problema,Come creare l'indice univoco per la tabella esistente in MySQL che contiene Records

ho bisogno di creare indice univoco nella mia tabella esistente, e la tabella contiene molti record.

ho cercato di eseguire questo codice

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

ma sto ottenendo errore come

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

Aiutatemi a risolvere questo problema, ho bisogno di fare campi univoci

Aggiornato:

La ragione per settin g questi campi unico è

In realtà ho una tabella come questa

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 

se abbia inserire un dato come questo,

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 

questo inserimento o aggiornamento avviene tramite l'importazione utilizzando Excel foglio

+1

È necessario pulire i dati per ottenere una tabella senza voci duplicate. Dopodiché avrai la possibilità di aggiungere l'INDICE UNICO. –

+0

c'è un modo per farlo senza rimuovere i dati ???? – Nodemon

+1

Non lo capisco. Una possibilità è quella di avere set di dati univoci e l'altra possibilità è di consentire voci duplicate nella tabella. Se si desidera aggiungere un documento UNICE INDICE, non è necessario avere voci duplicate nella tabella. Per favore leggi https://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html –

risposta

9
  1. Se si desidera avere indice univoco empid_name sul tavolo dipendente con colonne (importcompany_id, employee_id, name, relationship). Quindi è necessario eliminare i dati duplicati esistenti.

Un modo semplice per fare questo è aggiungere un indice UNICO sulle 4 colonne. Quando si scrive l'istruzione ALTER, includere la parola chiave IGNORE. Così:

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

Questo farà cadere tutte le righe duplicate. Come ulteriore vantaggio, i futuri INSERT duplicati verranno ignorati. Come sempre, potresti voler fare un backup prima di eseguire qualcosa di simile.

  1. Oppure Aggiungere la chiave primaria nella tabella, quindi è possibile rimuovere facilmente i duplicati dalla tabella. Quindi aggiungere un indice univoco.
1

Utilizzare alter table per questo

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

Vedere this per ulteriori riferimenti.

+0

errore durante l'esecuzione di questo – Nodemon

+0

maggio io ora qual è l'errore ?? –

+0

Ho modificato la mia risposta, per favore controlla che –

1

La soluzione più semplice è quella di aggiungere una nuova colonna denominata qualcosa come UniqueID

Se non ne hai bisogno per qualsiasi altro motivo, si potrebbe semplicemente imposta fino a AutoIncrement (AI): sarà priva di significato, ma almeno sarà univoco

Quindi si modifica l'indicizzazione in modo che la colonna UniqueID sia la chiave univoca/primaria. Se si desidera mantenere un indice sul dipendente, è possibile farlo, ma se si dispone di più di un record con lo stesso valore in quella colonna, verrà generato un errore se lo si specifica come univoco.

+0

per favore vedi sopra ho aggiornato la mia domanda..questo è il motivo per fare questo – Nodemon

+0

Se ho capito bene, la tua importazione cambierebbe il DOB (e ovviamente l'età) per Choodamani, e provo a inserire il record per Nirmal. (Non sono sicuro di come Nirmal sia figlio di 76 anni, ma questo è un altro problema !!) – user3600150

+0

Quindi la tua importazione NON deve usare l'ID univoco ... piuttosto seleziona nei campi rilevanti, identifica se è un INSERT o un UPDATE e consenti la tabella per elaborare l'ID corretto (è ciò che fa AutoIncrement) – user3600150