¿La definición de una clave externa también define un índice? Tengo mysql v5.1.46 & Estoy mirando la herramienta de administrador de MySQL y muestra la clave externa como un índice, así que quería confirmar?Pregunta de la clave externa de MySQL
Respuesta
Sí, MySQL 5.1 crea automáticamente un índice en la tabla de referencia cuando define una restricción de clave externa. MySQL requiere un índice tanto en la tabla de referencia como en la tabla a la que se hace referencia para las claves externas.
Sin embargo, tenga en cuenta que el índice se crea automáticamente solo en la tabla de referencia y no en la tabla a la que se hace referencia. MySQL no permitirá crear una clave externa que hace referencia a un campo en la tabla de referencia que no puede usar un índice:
CREATE TABLE orders (
id int PRIMARY KEY,
code int,
name varchar(10)
) ENGINE=INNODB;
CREATE TABLE order_details (
detail_id int PRIMARY KEY,
order_code int,
value int,
FOREIGN KEY (order_code) REFERENCES orders(code)
) ENGINE=INNODB;
ERROR 1005 (HY000): Can't create table 'test.order_details'
Esto no es muy común, ya que a menudo se estaría creando restricciones de claves foráneas que hacen referencia a la clave principal de la tabla a la que se hace referencia, y las claves principales se indexan automáticamente. Sin embargo, es probable que valga la pena tenerlo en cuenta.
Creación de un índice en el campo de la tabla orders
code
resolvería el problema:
CREATE INDEX ix_orders_code ON orders(code);
- Si ya existe un índice utilizable (un índice en las columnas de clave externa se enumeran como las primeras columnas en el mismo orden), entonces no se crea un nuevo índice.
- Si no hay un índice utilizable, la creación de una clave externa también crea un índice.
Esto se cubre en el documentation.
InnoDB requiere índices en claves externas y claves a las que se hace referencia para que las comprobaciones de claves externas puedan ser rápidas y no requieran una exploración 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 automáticamente en la tabla de referencia si no existe. (Esto está en contraste con algunas versiones anteriores, en las que los índices debían crearse explícitamente o la creación de restricciones de clave externa fallaría). Index_name, si se proporciona, se usa como se describió anteriormente.
- 1. Pregunta principal compuesta/clave externa Oracle pregunta
- 2. MySQL - Clave externa única
- 3. mysql concepto de clave externa
- 4. Tamaño de clave principal/externa de MySQL?
- 5. Restricción de clave externa MySQL - Columna entera
- 6. ¿Clave externa de columna múltiple en MySQL?
- 7. clave externa de MySQL para permitir NULL?
- 8. MySQL Sintaxis en la creación de la clave externa
- 9. MySQL - Usar clave externa como clave principal también
- 10. Cuándo utilizar una clave externa en MySQL
- 11. MySQL: Insertar si existe una clave externa
- 12. MySQL 5.5 restricción de clave externa falla cuando existe una clave externa
- 13. tabla MySQL añadir restricción de clave externa conduce a errores
- 14. Cambiar el nombre de columnas de clave externa en MySQL
- 15. Ignorar restricciones de clave externa de MySQL en PHP
- 16. Clave externa para la clave compuesta
- 17. MySQL gota de error de clave externa 152
- 18. ¿MySQL indexa las columnas de clave externa de forma automática?
- 19. diferencias entre "clave externa" y "restricción de clave externa"
- 20. MySQL restricciones de clave externa, eliminar en cascada
- 21. ¿Por qué usar restricciones de clave externa en MySQL?
- 22. gota MySQL Fuerza pasar por restricción de clave externa
- 23. JPA: anotación de clave externa
- 24. clave externa MySQL InnoDB entre diferentes bases de datos
- 25. clave externa cakephp no la clave primaria
- 26. ¿Clave externa a una de muchas tablas?
- 27. clave natural vs clave sustituta un innodb clave externa
- 28. Cambio de clave principal de MySQL cuando existe contraints clave externa
- 29. clave externa Hibernate como parte de la clave primaria
- 30. Cómo alterar la clave externa de una tabla MySQL usando la línea de comando
Corregido el enlace obsoleto a la documentación. –