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?

¿Fue útil?

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;

Referencias: 1 & 2.

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 >> ';


Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top