sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg afkorte alle tabeller fra en MySQL-database?

Ok, jeg løste det selv her er den lagrede procedure :)

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

Det, jeg laver, kalder alle tabeller fra den givne database, dette vil hjælpe, hvis tabellerne i den givne database ikke har noget mønster at følge.

Så ved at kalde DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName"; og ved at gemme resultater i en markør kan jeg hente alle TRUNCATE TABLE x sætninger genereret af "n"-mængden af ​​tabeller inde i den givne database, så ved blot at forberede og udføre hver sætning i markøren vil den afkorte alle tabellerne i den givne database.

Håber dette også hjælper en anden :)

Alex



  1. Hvordan kan jeg sammenligne store og små bogstaver i SQL-strenge på MySQL?

  2. Auto submit sender ikke data til databasen

  3. Hvordan indsætter man array-elementer i sql, der forbinder med c++?

  4. Brug af PHP/MySQL til at beregne procenter