sql >> Database >  >> RDS >> Mysql

Hoe kan ik alle tabellen uit een MySQL-database afkappen?

Ok, ik heb het zelf opgelost, hier is de opgeslagen 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

Wat ik maak, roept alle tabellen uit de gegeven database op, dit zal helpen als de tabellen in de gegeven database geen patroon hebben om te volgen.

Dus door DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName"; en resultaten opslaan in een cursor. Ik kan alle TRUNCATE TABLE x . ophalen instructies gegenereerd door de "n" hoeveelheid tabellen in de gegeven database, en door elke instructie in de cursor voor te bereiden en uit te voeren, worden alle tabellen in de gegeven database afgekapt.

Ik hoop dat dit iemand anders ook helpt :)

Alex



  1. Hoe voorwaardelijk UPDATE/INSERT na DELETE die geen rijen vindt?

  2. Tel het aantal keren dat de waarde in een bepaalde kolom in MySQL verschijnt

  3. Hoe beperk ik het aantal rijen per veldwaarde in SQL?

  4. Hoe doe je een Left Outer join met Laravel?