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?
5 answers
Dado que no está interesado en mantener ningún dato, elimine toda la base de datos y cree una nueva.
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.
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í".
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-
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;
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