2010-02-19 22 views
104

Estoy tratando de eliminar todas las tablas de una base de datos, excepto uno, y llegar a tener el siguiente error:gota MySQL Fuerza pasar por restricción de clave externa

Cannot delete or update a parent row: a foreign key constraint fails

Por supuesto que pude ensayo y error para ver qué esas restricciones clave son y eventualmente eliminan todas las tablas, pero me gustaría saber si hay una forma rápida de forzar el abandono de todas las tablas (ya que podré volver a insertar las que no quiero eliminar).

Google me dirigido a algún sitio que sugiere el siguiente método:

mysql> SET foreign_key_checks = 0; 
mysql> drop table ... 
mysql> SET foreign_key_checks = 1; 

respuesta corta es que en realidad no hacer el truco desde que terminó recibiendo el mismo error mientras yo era capaz de eliminar un poco más mesas. He visto en Stack Overflow formas de obtener todas las claves externas vinculadas a una determinada tabla, pero eso consume demasiado tiempo a menos que lo script todo (lo cual es factible en el caso de que no haya otra opción)

La base de datos es 4.1 No puedo usar DROP DATABASE

Ideas?

Respuesta

-14

Dado que no está interesado en conservar ningún dato, drop the entire database y crear uno nuevo.

+0

Olvidé decir que la base de datos no es mysql 5.x sino 4.x lo que significa que no puedo usar ese comando – johnnyArt

+1

Creo que deberías - http://dev.mysql.com/doc/refman /4.1/en/drop-database.html –

+2

Ay, me siento tan estúpido ahora, estaba sustituyendo la palabra BASE DE DATOS con el nombre real de la base de datos en lugar de agregarlo después, gracias +1 – johnnyArt

3

Existe una base de datos en todas las versiones de MySQL. Pero si se quiere mantener la estructura de la tabla, aquí es una idea

mysqldump --no-datos --add-drop-base de datos --add soltar mesa -hHOSTNAME -uUSERNAME -p> dump.sql

Este es un programa, no un comando mysql

a continuación, iniciar sesión en MySQL y dump.sql

fuente;

302

Esto podría ser útil para alguien que termina aquí desde una búsqueda. Asegúrese de que está intentando colocar una tabla y no una vista.

 
SET foreign_key_checks = 0; 
-- Drop tables 
drop table ... 
-- Drop views 
drop view ... 
SET foreign_key_checks = 1; 

SET foreign_key_checks = 0 es establecer controles de claves externas con apagar y SET foreign_key_checks = 1 es establecer controles clave externa de nuevo. Mientras que las verificaciones están desactivadas, las tablas se pueden descartar, luego se vuelven a activar para mantener la integridad de la estructura de la tabla. captura de pantalla

+27

¡PAT es mi amigo! – SeanDowney

+5

Esta es una mejor respuesta correcta. Resuelve el problema ya sea borrando todas las tablas, o solo algunas. ¡Estupendo! –

+0

Muchas gracias, estaba realmente frustrado por esto. –

4

Se pueden utilizar los siguientes pasos, su trabajó para que lo deje mesa con limitación, solución ya se ha explicado en el comentario anterior, me acaba de agregar para que - enter image description here

12

Si está utilizando phpmyadmin entonces esta característica ya está allí.

  • Seleccione las tablas que desea dejar caer
  • En el menú desplegable en la parte inferior de la lista de tablas, seleccione gota
  • Se abrirá una nueva página con casilla de verificación en la parte inferior que dice "verificación de claves de Asuntos Exteriores", desmárcala
  • Confirme la eliminación aceptando "sí".
+0

¡Me salvaste el día! ¡Gracias! ¡Trabajado como un encanto! – Kami

+0

La única forma en que funcionó para mí. Gracias ! – paulalexandru

Cuestiones relacionadas