2010-07-01 6 views
12

Est-il possible de tronquer toute la table dans la base de données mysql? quelle est la requête pour cela.tronquer toute la table dans la base de données mysql

+0

double possible de [tronquer toutes les tables dans une base de données MySQL dans une commande?] (Http://stackoverflow.com/questions/1912813/truncate-all-tables-in-a-mysql-database -dans-une-commande) –

Répondre

6

Vous pouvez faire cette requête:

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

ensuite enregistrer les résultats dans un script et l'exécuter.

Autre possibilité pourrait être,

  1. Exécutez la requête
  2. copier les résultats dans le presse-papiers (copier)
  3. coller les résultats dans l'interpréteur de commandes MySQL (PATE)

Terminé.

Si vous exécutez simplement la requête, vous comprendrez ce que j'essaie de dire.

+0

Désolé, mais je ne comprends pas votre déclaration, enregistrer les résultats dans un script et l'exécuter. – chetan

+0

OK, faites ceci. Je vais mettre à jour la question. –

3

Impossible d'utiliser une requête sql unique.

+2

Ce qui est probablement une bonne chose. –

8

continue des tuyaux @Pablo n'ont pas été concaténer pour moi - et je voulais limiter à une seule base de données, puis seulement les tables

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

J'ai eu le même problème que les pipes n'ont pas concaténé (MySQL 5.6.15). Cela a fonctionné pour moi. – nagu

2

Ici, je vous laisse une procédure stockée pour réinitialiser votre base de données 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

Vous pouvez simplement sélectionner toutes les tables, puis sélectionner tout tronquer.

enter image description here

+0

Ceci est vraiment utile. Merci beaucoup. Je suis à la recherche de ce type de solution et c'est aussi une application dans mysqlworkbench. –

Questions connexes