2010-07-01 7 views
12

Ist es möglich, alle Tabellen in MySQL-Datenbank abzuschneiden? Was ist eine Abfrage dafür?alle Tabellen in Mysql-Datenbank abschneiden

+0

möglich Duplikat [Kürzt alle Tabellen in einer MySQL-Datenbank in einem Befehl?] (Http://stackoverflow.com/questions/1912813/truncate-all-tables-in-a-mysql-database -in-one-command) –

Antwort

6

Sie können diese Abfrage tun:

select 'truncate table ' || table_name || ';' 
    from INFORMATION_SCHEMA.TABLES; 

Dann Ergebnisse zu einem Skript speichern und ausführen.

Andere Möglichkeit könnte sein,

  1. Führen Sie die Abfrage
  2. Kopieren Sie die Ergebnisse in die Zwischenablage (COPY)
  3. Fügen Sie die Ergebnisse in die MySQL-Kommandointerpreter (PASTE)

Erledigt.

Wenn Sie nur die Abfrage ausführen, werden Sie verstehen, was ich zu sagen versuche.

+0

Entschuldigung, aber ich kann Ihre Aussage nicht verstehen, Ergebnisse in einem Skript speichern und ausführen. – chetan

+0

OK, mach das. Ich werde die Frage aktualisieren. –

3

Nicht möglich mit einer einzigen SQL-Abfrage.

+2

Was wahrscheinlich eine gute Sache ist. –

8

aus @Pablo Rohren Fortsetzung waren nicht für mich verketten - und ich wollte es auf eine einzige Datenbank beschränken und dann nur Tabellen

SELECT CONCAT('truncate table ',table_name,';') 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = '<<YOUR-DB-NAME>>' 
AND TABLE_TYPE = 'BASE TABLE'; 
+0

Ich hatte das gleiche Problem, dass Pipes nicht verkettet (MySQL 5.6.15). Das hat für mich funktioniert. – nagu

2

Hier lasse ich euch eine gespeicherte Prozedur Ihre Datenbank zurückgesetzt Cero

CREATE DEFINER=`root`@`localhost` PROCEDURE `reset_database`(DB_NAME VARCHAR(100)) 
BEGIN 
DECLARE done INT DEFAULT FALSE; 
DECLARE tableName VARCHAR(100); 
DECLARE cur CURSOR FOR SELECT table_name FROM INFORMATION_SCHEMA.tables WHERE table_schema = DB_NAME AND table_type = 'BASE TABLE'; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

OPEN cur; 

SET FOREIGN_KEY_CHECKS = 0; 
read_loop: LOOP 
FETCH cur INTO tableName; 
    IF done THEN LEAVE read_loop; END IF; 
    SET @s = CONCAT('truncate table ',tableName); 
    PREPARE stmt1 FROM @s; 
    EXECUTE stmt1; 
    DEALLOCATE PREPARE stmt1; 
END LOOP; 
SET FOREIGN_KEY_CHECKS = 1; 

CLOSE cur; 
END; 
5

Sie können einfach alle Tabellen auswählen und dann alle abschneiden auswählen.

enter image description here

+0

Das ist wirklich hilfreich. Vielen Dank. Ich bin auf der Suche nach dieser Art von Lösung und es ist auch Anwendung in mysqlworkbench. –