Respuestas:
Sí, pero solo en innodb. Innodb es actualmente el único formato de tabla enviado que tiene claves externas implementadas.
Aparentemente, un índice se crea automáticamente como se especifica en el enlace que Robert ha publicado .
InnoDB requiere índices en claves externas y claves referenciadas para que las comprobaciones de claves externas puedan ser rápidas y no requieran un escaneo de tabla. En la tabla de referencia, debe haber un índice donde las columnas de clave externa se enumeran como las primeras columnas en el mismo orden. Dicho índice se crea en la tabla de referencia automáticamente si no existe. (Esto contrasta con algunas versiones anteriores, en las que los índices debían crearse explícitamente o la creación de restricciones de clave externa fallaba). Index_name, si se proporciona, se usa como se describió anteriormente.
InnoDB permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are the first columns in the same order.
Sí, vea Restricciones de InnoDB y FOREIGN KEY .
No obtienes el índice automáticamente si haces una ALTER TABLE (en lugar de CREATE TABLE), al menos según los documentos (el enlace es para 5.1 pero es lo mismo para 5.5):
[...] Cuando agrega una restricción de clave externa a una tabla usando ALTER TABLE, recuerde crear primero los índices requeridos.
Para aquellos que buscan presupuesto de 5.7
documentos :
MySQL requiere índices en claves externas y claves referenciadas para que las comprobaciones de claves externas puedan ser rápidas y no requieran un escaneo de tabla. En la tabla de referencia, debe haber un índice donde las columnas de clave externa se enumeran como las primeras columnas en el mismo orden. Dicho índice se crea en la tabla de referencia automáticamente si no existe. Este índice puede descartarse en silencio más adelante, si crea otro índice que pueda usarse para imponer la restricción de clave externa. index_name, si se proporciona, se usa como se describió anteriormente.
Como se dijo, lo hace para InnoDB. Al principio pensé que era extraño que muchos otros (en particular MS SQL y DB2) no lo hagan. Los escaneos de TableSpace son mejores que los escaneos de índice cuando hay muy pocas filas de tablas, por lo que para la gran mayoría de los casos, una clave externa querría ser indexada. Entonces me golpeó, esto no necesariamente significa que tiene que ser un índice independiente (una columna), donde está en el índice FK automático de MySQL. Entonces, puede ser que esa sea la razón por la cual MS SQL, DB2 (Oracle no estoy seguro), etc., lo dejan en manos del DBA; después de todos los índices múltiples en tablas grandes pueden causar problemas con el rendimiento y el espacio.
Sí, Innodb
proporcione esto. Puede poner un nombre de clave foránea después de la FOREIGN KEY
cláusula o dejarlo para que MySQL cree un nombre para usted. MySQL crea automáticamente un índice con el foreign_key_name
nombre.
CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action
No es posible obtener la clave de índice automáticamente
ALTER TABLE (NAME OF THE TABLE) ADD INDEX (FOREIGN KEY)
Nombre de la tabla que ha creado, por ejemplo, fotografías y LLAVE EXTRANJERA, por ejemplo photograph_id
. El código debería ser así
ALTER TABLE photographs ADD INDEX (photograph_id);