Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je tronquer toutes les tables d'une base de données MySQL ?

Ok, je l'ai résolu par moi-même voici la procédure stockée :)

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

Ce que je fais, c'est appeler toutes les tables de la base de données donnée, cela aidera si les tables à l'intérieur de la base de données donnée n'ont pas de modèle à suivre.

Ainsi, en appelant DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName"; et en sauvegardant les résultats dans un curseur, je peux récupérer tous les TRUNCATE TABLE x instructions générées par la quantité "n" de tables à l'intérieur de la base de données donnée, puis en préparant et en exécutant simplement chaque instruction dans le curseur, toutes les tables à l'intérieur de la base de données donnée seront tronquées.

J'espère que cela aidera quelqu'un d'autre aussi :)

Alexandre