Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę obciąć wszystkie tabele z bazy danych MySQL?

Ok, rozwiązałem to sam, oto procedura składowana :)

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 nazywam wszystkimi tabelami z danej bazy danych, pomoże, jeśli tabele w danej bazie danych nie będą miały żadnego wzorca do naśladowania.

Tak więc wywołując DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName"; i zapisując wyniki w kursorze mogę pobrać wszystkie TRUNCATE TABLE x zestawienia wygenerowane przez ilość "n" tabel w danej bazie danych, a po prostu przygotowanie i wykonanie każdej instrukcji w kursorze spowoduje obcięcie wszystkich tabel w danej bazie danych.

Mam nadzieję, że to pomoże też komuś innemu :)

Alex



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd MySQL #1005 (kod 150)

  2. Zapytanie MySQL Not IN nagle przestało zwracać wyniki

  3. Jak zainicjować bazę danych MySQL ze schematem w kontenerze Docker?

  4. Jak połączyć się z MySQL 5.1 w Visual Studio 2010?

  5. Problem z wyborem grupy warunków Mysql według zamówienia