sql >> Databáze >  >> RDS >> Mysql

Jak mohu zkrátit všechny tabulky z databáze MySQL?

Ok, vyřešil jsem to sám, tady je uložená procedura :)

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

To, co dělám, volám všechny tabulky z dané databáze, to pomůže, pokud tabulky v dané databázi nemají žádný vzor, ​​který by se dal následovat.

Takže zavoláním DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName"; a uložení výsledků do kurzoru mohu načíst všechny TRUNCATE TABLE x příkazy generované "n" množstvím tabulek v dané databázi, pak pouhým přípravou a provedením každého příkazu v kurzoru zkrátí všechny tabulky v dané databázi.

Doufám, že to pomůže i někomu dalšímu :)

Alex



  1. Výjimka v JPA při použití seed souboru pro PostgreSQL

  2. Přejmenování sloupce v SQL Server (T-SQL)

  3. Android with Room - Jak nastavit cizí klíč s možnou hodnotou Null

  4. SQL - Dejte mi 3 přístupy pouze pro každý typ