2012-06-19 23 views
32

En MySQL deseo colocar una tabla.
Intenté muchas cosas, pero sigo recibiendo el error de que la tabla llamada bericht no se puede quitar. Este es el error que estoy recibiendo:No se puede eliminar la tabla: una restricción de clave externa falla

# 1217 - No se puede eliminar o actualizar una fila padre: una restricción de clave externa no

¿Cómo dejo caer esta tabla?

+2

Averigüe qué otra tabla lo está haciendo referencia a través de una clave externa, y primero suelte la restricción FK en esa tabla, luego suelte esta tabla. –

+0

Necesita eliminar el requisito de otras tablas en el que ya no quiere – BugFinder

+1

¿Alguna de estas respuestas lo ayuda? http://stackoverflow.com/questions/1905470/cannot-delete-or-update-a-parent-row-a-foreign-key-constraint-fails http://stackoverflow.com/questions/3334619/can not-delete-or-update-a-parent-row-a-foreign-key-constraint-failed –

Respuesta

44

Pruebe esto:

SELECT * 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_NAME = 'YourTable'; 

Esto debería ofrecer que las tablas que tienen referencias a la tabla que desea colocar, una vez que se le cae estas referencias, o los conjuntos de datos que los conjuntos de datos de referencia en esta tabla usted será capaz de eliminar la tabla

+4

Esta solución es mucho mejor. Es más seguro y no es una mala práctica como la respuesta seleccionada. – Sloganho

+1

funcionó para mí, esta respuesta debe marcarse como aceptada. – parvez

68

Esto debería hacer el truco:

SET FOREIGN_KEY_CHECKS=0; DROP TABLE bericht; SET FOREIGN_KEY_CHECKS=1; 

Como otros señalan, esto casi nunca es lo que quiere, a pesar de que le preguntó cuál está en la pregunta. Una solución más segura es eliminar las tablas según bericht antes de eliminar bericht. Vea la respuesta de CloudyMarble sobre cómo hacer eso. Utilizo bash y el método en mi publicación para colocar todas las tablas en una base de datos cuando no quiero o no puedo eliminar y volver a crear la base de datos.

El error #1217 se produce cuando otras tablas tienen restricciones de clave externa en la tabla que está intentando eliminar y está utilizando el motor de la base de datos InnoDB. Esta solución desactiva temporalmente el control de las restricciones y luego las vuelve a habilitar. Lea el documentation para obtener más información. Asegúrese de eliminar las restricciones de clave externa y los campos en las tablas, según bericht, de lo contrario, podría dejar su base de datos en un estado dañado.

+2

Esto debe seleccionarse responder – kyeno

+0

hasta ahora es la mejor respuesta y debe estar en la parte superior !!!!!! –

+1

Aunque es correcto, es una MALA PRÁCTICA increíble hacer esto. Como señalaron varios usuarios (incluido Rune Kaagaard), debe encontrar las referencias, analizarlas y soltarlas según sea necesario. – zozo

1

Esto probablemente tiene la misma tabla que otros esquemas, razón por la cual está obteniendo ese error.

Debe colocar primero la fila secundaria y luego la fila primaria.

0

Soy consciente de que está demasiado cargado por un tiempo y una respuesta habían sido seleccionados, pero ¿qué hay de la alternativa para permitir la clave externa sea NULL y luego elegir en Borrar SET NULL.

Básicamente, su mesa se debe cambiar así:

ALTER TABLE 'bericht' DROP FOREIGN KEY 'your_foreign_key';

ALTER TABLE 'bericht' ADD CONSTRAINT 'your_foreign_key' FOREIGN KEY ('column_foreign_key') REFERENCES 'other_table' ('column_parent_key') ON UPDATE CASCADE ON DELETE SET NULL;

Personalmente recomendaría el uso de ambos "ON UPDATE CASCADE", así como "ON DELETE SET NULL" para evitar complicaciones innecesarias, sin embargo, su configuración puede dictar un enfoque diferente.

Espero que esto ayude.

Cuestiones relacionadas