Cómo comprobar claves foráneas relacionadas con una tabla
-
26-09-2020 - |
Pregunta
¿Cómo ver claves foráneas relacionadas con una tabla en MySql?
Fondo :Quería eliminar una tabla en MySql que tiene una restricción de clave externa.Cuando lo hago me sale esto:
Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails
¿Cómo puedo eliminar claves externas relacionadas con la tabla y dejar otras?
Solución
En primer lugar, descubre tu FOREIGN KEY
nombre de la restricción de esta manera:
SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME, -- <<-- the one you want!
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_NAME = 'My_Table';
También puedes agregar (al WHERE
cláusula) si tiene más de una tabla llamada My_Table
en diferentes esquemas.
AND TABLE_SCHEMA = 'My_Database';
Y luego puedes eliminar la restricción nombrada de la siguiente manera:
ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;
Otros consejos
editore la consulta anterior.Se ha cambiado el nombre de la tabla de referencia al nombre de la tabla, ya que el nombre de la tabla de referencia es la tabla que se está haciendo referencia y, por lo tanto, el resultado de la consulta original no le mostrará las llaves extranjeras en su mesa.
SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME, -- <<-- the one you want!
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
Table_name = 'case_qualitycontrolcase' and constraint_name = f
en MySQL 5.7.Puede encontrar las reglas de relaciones y relaciones de la tabla.
SELECT
DISTINCT a.TABLE_NAME,
a.CONSTRAINT_NAME,
b.DELETE_RULE,
b.UPDATE_RULE,
a.REFERENCED_TABLE_NAME,
a.COLUMN_NAME,
a.REFERENCED_COLUMN_NAME,
a.TABLE_SCHEMA
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS b USING (CONSTRAINT_NAME)
WHERE
a.TABLE_SCHEMA = "DATABASE_NAME" AND
a.REFERENCED_TABLE_NAME = 'TABLE_NAME'
ORDER BY a.TABLE_NAME ASC;
Puede ejecutar directamente la salida de esta consulta para soltar la restricción de la tabla de referencia.
select concat('ALTER TABLE ' ,CONSTRAINT_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ' ,CONSTRAINT_NAME ,';' )
from information_schema.REFERENTIAL_CONSTRAINTS
where REFERENCED_TABLE_NAME='<<table to be dropped >> ';