MySQL - Datenbank automatisch leeren

13. Dezember 2007

Dennis hat mich vor Kurzem gefragt, ob man alle Tabellen einer Datenbank leeren kann, da er einen Import testen musste. Verteilt dieser sich auf eine Menge Tabellen, dessen Anzahl sich während der Entwicklung noch verändern kann, ist Handarbeit angesagt. Passenderweise bietet SQL genau dafür den Befehl truncate an. Die Tabelle wird gelöscht und mit ihrem ursprünglichen create-Statement wieder erzeugt. Deshalb ist truncate auch erheblich schneller als delete.

Möchte man aber jetzt alle Tabellen in einer Datenbank leeren, kann man dafür ein Script per Hand anlegen, welches alle Tabellennamen enthält oder lieber eine Prozedur schreiben (oder jetzt hier runterladen), die einem die Arbeit abnimmt ;)

DROP PROCEDURE IF EXISTS `trunc_db`;
DELIMITER /


CREATE PROCEDURE `trunc_db`(db VARCHAR(64))
BEGIN


DECLARE done INT DEFAULT 0;
DECLARE tbl VARCHAR(255);


DECLARE cur CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_type ='BASE TABLE' AND TABLE_SCHEMA = db;


DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;


OPEN cur;


REPEAT
FETCH cur INTO tbl;
SET @s = CONCAT('TRUNCATE `', db, '`.`', tbl, '`');
PREPARE stm FROM @s;
IF NOT done THEN
EXECUTE stm;
END IF;
UNTIL done END REPEAT;


CLOSE cur;
END;
/
DELIMITER ;

Das Script kann hier runtergeladen werden. Die Prozedur prüft nicht auf vorhandene Fremdschlüssel, es kann also vorkommen, dass sie auf Grund einer Constraint-Verletzung nicht durchläuft. Viel Spaß beim Erweitern der Prozedur :)

1 Kommentar »

Wiener Christkindlmarkt

13. Dezember 2007

Man könnte meinen ich wohne in Wien, aber dem ist nicht so. Wir waren nur einfach mal wieder in Wien, wo soll man hier auch sonst hin!? Diesmal ging es mit der Hochschulfraktion zum Christkindlmarkt. War rund um ganz lustig, mehr gibt es nicht zu sagen :)

3 Kommentare »