Truncar tabla de MySQL o MariaDB desactivando claves foráneas

Publicado por parzibyte en

MySQL y MariaDB - Chequeo de claves foráneas al truncar tabla

En este post voy a explicar cómo truncar una tabla de MySQL o MariaDB sin que nos estorben las claves foráneas o foreign keys.

MySQL y MariaDB - Chequeo de claves foráneas al truncar tabla

MySQL y MariaDB – Chequeo de claves foráneas al truncar tabla

Al truncar una tabla con MySQL, si esta tiene referencias a otras tablas, saldrá un error que dice más o menos así:

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (base_de_datos.tabla, CONSTRAINT alguna_referencia FOREIGN KEY (alguna_clave) REFERENCES base_de_datos.otra_tabla (clave))

Esto es por seguridad, ya que al truncar se eliminarían si tuviéramos la opción de cascada al eliminar datos. En fin, veamos cómo truncar una tabla aunque tenga referencias a otras.

Desactivar FOREIGN_KEY_CHECKS

Nota: antes de esto asegúrate de que ya no necesitas los datos. También recomiendo hacer un respaldo (con PHP también puedes) por si algo sale mal.

La solución es fácil y ya la vimos cuando eliminamos todas las tablas de una base de datos, sin embargo, ese no era el tema principal. En fin, en tu consola ejecuta lo siguiente:

SET FOREIGN_KEY_CHECKS = 0;

Después de eso, haz el truncate de todas las tablas que quieras. Verás que no habrá errores que te detengan. Una vez que termines de truncar todas las tablas y verifiques que efectivamente están vacías, activa el chequeo de nuevo con:

SET FOREIGN_KEY_CHECKS = 1;

Así aseguras la integridad de los datos y te aseguras de no eliminar datos que tengan referencia en un incidente.

Si no tienes acceso a la consola

En caso de que no puedas ejecutar comandos, simplemente haz un delete y luego reinicia el contador de auto incremento si es que existe.

Mira más sobre bases de datos o MySQL en mi blog.


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB.Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron.Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scriptsLa plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C.Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: