sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag trunkera alla tabeller från en MySQL-databas?

Ok, jag löste det själv här är den lagrade proceduren :)

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 jag gör att det kallar alla tabeller från den givna databasen, detta kommer att hjälpa om tabellerna i den givna databasen inte har något mönster att följa.

Så genom att anropa DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName"; och spara resultat i en markör kan jag hämta alla TRUNCATE TABLE x satser som genereras av "n"-antalet tabeller i den givna databasen, sedan genom att bara förbereda och köra varje sats i markören kommer den att trunkera alla tabeller i den givna databasen.

Hoppas detta hjälper någon annan också :)

Alex



  1. Oracle lägg till aktuellt datum automatiskt

  2. Hur man skapar användare med superanvändarprivilegier i PostgreSQL

  3. Ingen lämplig drivrutin hittades för jdbc:oracle:thin:@localhost:1521:XE när webbapplikationen körs

  4. Ta bort dubbletter av poster utan att skapa en tillfällig tabell