sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo truncar todas las tablas de una base de datos MySQL?

Ok, lo resolví por mi cuenta aquí está el procedimiento almacenado :)

BEGIN
    DECLARE done BOOLEAN DEFAULT FALSE; 
    DECLARE truncatestmnt TEXT; -- this is where the truncate statement will be retrieved from cursor

    -- This is the magic query that will bring all the table names from the database
    DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName";
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE; 

    OPEN c1;

    c1_loop: LOOP
    FETCH c1 INTO truncatestmnt;
    IF `done` THEN LEAVE c1_loop; END IF;
        SET @x = truncatestmnt;
        PREPARE stm1 FROM @x;
        EXECUTE stm1;
    END LOOP c1_loop; 

    CLOSE c1;
END

Lo que estoy haciendo es llamar a todas las tablas de la base de datos dada, esto ayudará si las tablas dentro de la base de datos dada no tienen un patrón a seguir.

Entonces llamando a DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName"; y guardando los resultados en un cursor, puedo obtener todas las TRUNCATE TABLE x declaraciones generadas por la cantidad "n" de tablas dentro de la base de datos dada, luego, simplemente preparando y ejecutando cada declaración en el cursor, truncará todas las tablas dentro de la base de datos dada.

Espero que esto también ayude a alguien más :)

Álex