Fundamentos de las Claves Foráneas en MySQL?


¿Hay alguna buena explicación de cómo usar la construcción de clave foránea de MySQL?

No lo entiendo del todo de los documentos de MySQL. Hasta ahora he estado manejando cosas como claves foráneas con uniones y código de programación.

Y la segunda parte de la pregunta, ¿hay alguna mejora que hacer mediante el uso de las claves foráneas incorporadas de MySQL?

Author: Macha, 2009-04-16

4 answers

FOREIGN KEYS solo asegúrese de que sus datos sean consistentes.

No mejoran las consultas en sentido de eficiencia, solo hacen que algunas consultas incorrectas fallen.

Si tienes una relación como esta:

CREATE TABLE department (id INT NOT NULL)
CREATE TABLE employee (id INT NOT NULL, dept_id INT NOT NULL, FOREIGN KEY (dept_id) REFERENCES department(id))

, entonces no se puede eliminar un department si tiene algunos employee ' s.

Si proporciona ON DELETE CASCADE a la definición FOREIGN KEY, las filas de referencia se eliminarán automáticamente junto con las referenciadas.

Como restricción, FOREIGN KEY en realidad ralentiza un poco las consultas.

Se debe realizar una comprobación adicional cuando se elimina de una tabla referenciada o se inserta en una tabla referenciada.

 113
Author: Quassnoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-27 17:52:37

Los principales beneficios de usar claves externas reales son garantizar la integridad de los datos y poder configurar acciones en cascada sobre elementos relacionados cuando algo se modifica o elimina.

Por ejemplo, imagina que estás programando un foro. Tiene una tabla " temas "con clave primaria topics.topic_id, y tiene una tabla" mensajes " donde los mensajes se adjuntan a los temas con la columna posts.topic_id, que es una clave externa a la tabla temas.

Esta relación de clave externa asegura que cada mensaje se adjunta a un tema válido. Si el único tema que tiene tiene ID # 1, es imposible que exista una publicación en la base de datos adjunta al tema #2. La base de datos garantiza esto.

Para el beneficio en cascada, puede configurarlo para que si se elimina un tema de la tabla de temas, la base de datos elimine automáticamente todos los mensajes de la tabla de mensajes que se adjuntaron a este tema. Esto es bueno porque elimina un paso que tienes que recordar hacer manualmente, que puede ser bastante complejo cuando tienes muchas tablas enlazadas. Con las claves foráneas todas las relaciones se pueden limpiar automáticamente.

 31
Author: Chad Birch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-16 17:33:52

1.Las CLAVES FORÁNEAS solo aseguran que sus datos sean consistentes.

2. Si aplicamos on delete cascade a la definición de clave foránea, la referencia a la fila se eliminará automáticamente cuando la fila principal se elimine.

3. Si aplicamos on Update Cascade a la definición de clave foránea, la fila secundaria se actualizará automáticamente cuando la fila principal se actualice.

Consulta: ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent (id) ON UPDATE CASCADE ON DELETE CASCADE ;

  1. no puede eliminar la tabla principal directa , primero elimine la clave externa de la tabla secundaria que elimine la tabla principal.
 10
Author: Gaurav Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-10 07:30:09

La principal ventaja es que puede limitar los valores que puede introducir en la tabla; si intenta introducir un valor que no existe en la tabla referenciada, no podrá hacerlo.

Además, si actualiza o elimina el valor en la tabla referenciada, puede configurarlo para actualizar automáticamente el valor o eliminar en cascada cualquier fila que contenga ese valor.

De hecho, es una gran característica que aprovecha su código.

 6
Author: Seb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-16 17:31:25