Forzar la caída de mysql omitiendo la restricción de clave foránea


Estoy tratando de eliminar todas las tablas de una base de datos excepto una, y termino teniendo el siguiente error:

No se puede eliminar o actualizar una fila principal: una restricción de clave foránea falla

Por supuesto, podría probar y error para ver cuáles son esas restricciones clave y, finalmente, eliminar todas las tablas, pero me gustaría saber si hay una forma rápida de forzar la eliminación de todas las tablas (ya que podré volver a insertar las que no quiero eliminar).

Google me apuntó a algún sitio que sugirió el siguiente método:

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

La respuesta corta es que realmente no funcionó, ya que terminé recibiendo el mismo error mientras pude eliminar algunas tablas más. He visto en Stack Overflow formas de obtener todas las claves foráneas vinculadas a una determinada tabla, pero eso es demasiado tiempo a menos que script todo (que es factible en el caso de que no hay otra opción)

La base de datos es 4.1, así que no puedo usar DROP DATABASE

Ideas?

Author: Brian Tompsett - 汤莱恩, 2010-02-20

5 answers

Dado que no está interesado en mantener ningún dato, elimine toda la base de datos y cree una nueva.

 -15
Author: Otávio Décio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-19 23:53:44

Esto podría ser útil para alguien que termina aquí de una búsqueda. Asegúrese de que está tratando de eliminar 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 las comprobaciones de claves foráneas en off y luego SET foreign_key_checks = 1 es volver a activar las comprobaciones de claves foráneas. Mientras que las comprobaciones están fuera de las tablas se pueden eliminar, las comprobaciones se vuelven a activar para mantener la integridad de la estructura de la tabla.

 327
Author: PAT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-07 15:03:37

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

  • Seleccione las tablas que desea soltar
  • En el menú desplegable en la parte inferior de la lista de tablas, seleccione drop
  • Se abrirá una nueva página con una casilla de verificación en la parte inferior que dice "Foreign key check", desmarcarlo.
  • Confirme la eliminación aceptando "sí".
 14
Author: Ali Azhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-09 14:44:59

Puede usar los siguientes pasos, me funcionó para soltar la tabla con restricción, la solución ya se explicó en el comentario anterior, acabo de agregar una captura de pantalla para eso- introduzca la descripción de la imagen aquí

 5
Author: srinivas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-02 15:46:42

La base de datos Drop existe en todas las versiones de MySQL. Pero si desea mantener la estructura de la tabla, aquí hay una idea

Mysqldump no no-data.add-drop-database > add-drop-table-hHOSTNAME-uUSERNAME-p > dump.sql

Este es un programa, no un comando mysql

Luego, inicie sesión en mysql y

Volcado de fuentes.sql;

 3
Author: MindStalker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-20 00:55:21