una sintaxis restricciones modificar llave integridad foranea crear constraint como clave agregar mysql sql foreign-keys foreign-key-relationship

sintaxis - restricciones mysql workbench



Encuentra qué filas donde falla la restricción de clave externa (2)

La solución de InoS Heo funcionará. Aquí hay otra manera.

SELECT * FROM child WHERE NOT key IN ( SELECT key FROM parent );

Por supuesto, la key es el campo (s) de destino que pretende poner la restricción más adelante.

Al intentar agregar una restricción de clave externa a dos tablas muy grandes, aparece el error.

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

Esto generalmente se debe a que algunos datos en la tabla principal no están presentes en la tabla externa, normalmente verifico anomalías conocidas como valores nulos, valores fuera de rango, etc., una vez que se han resuelto, puedo satisfacer la restricción. Sin embargo esta vez el problema es más sutil.

Lo que quiero saber es si hay alguna forma de consultar todas las filas que están causando que la restricción falle.


Suponiendo que tiene la siguiente tabla, y la relación FK.

parent(parent_id (PK), name) child(child_id, name, parent_id (FK));

Puede encontrar qué filas faltan en parent tabla parent pero existen en child tabla child , utilizando la siguiente LEFT JOIN :

SELECT child.parent_id FROM child LEFT JOIN parent ON child.parent_id = parent.parent_id WHERE parent.parent_id IS NULL;