2011-03-15 18 views
6

Tengo que hacer que una de las claves foráneas sea única. El problema es, que estoy recibiendo el siguiente mensaje desde el phpMyAdmin:MySQL - Clave externa única

 
The following indexes appear to be equal and one of them should be removed: consignmentnumber_id_UNIQUE, fk_consignments_consignmentnumbers2 

Así que mi pregunta es la siguiente: ¿Debo ser molestado? ¿Es realmente importante no tener tales índices?

Respuesta

13

Cada columna con una clave (primaria, extranjera) necesita un índice. Lo mismo con la columna como única. Probablemente haya creado dos índices (uno al crear FK y otro en restricción Única). Si este es el caso, simplemente suelte uno de esos índices.

Es sobrecarga para el DB mantener dos índices equivalentes.

+0

Puede agregar que crear una LLAVE EXTRAÑA en M ySQL realmente creará un ÍNDICE en las columnas de referencias y referencia a menos que ya exista uno. – Romain

+0

Entonces, ¿está diciendo que puedo eliminar el índice UNIQUE y la columna permanecerá ÚNICA? Agregué este índice marcando "Único" en MySQL Workbench. – Cleankod

+4

Actualmente supongo que tienes 2 índices de tipos INDEX y ÚNICO. Si este es el caso, debe eliminar el INDICE uno. El UNIQUE es obligatorio por ser único y suficiente para FK. –

0

Para que lo sepas, parece que también puede tener números claves externas:

CREATE TABLE user(
uid INT NOT NULL AUTO_INCREMENT, 
username VARCHAR(16) NOT NULL UNIQUE, 
email_id INT NOT NULL UNIQUE, 
FOREIGN KEY (email_id) REFERENCES email(uid) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 

PRIMARY KEY (uid)); 
2

Para el futuro, si desea hacer su clave externa único, simplemente puede modificar su columna de clave externa de esta manera:

ALTER TABLE your_table 
MODIFY COLUMN your_fk_column [INT, VARCHAR etc.][NOT NULL] UNIQUE; 
Cuestiones relacionadas