Truncar todas as tabelas em uma base de dados MySQL em um único comando?

Existe uma consulta (comando) para truncar todas as tabelas de uma base de dados em uma única operação? Quero saber se posso fazer isso com uma única consulta.

MS SQL Server 2005+ (Remover PRINT para execução real...)

EXEC sp_MSforeachtable 'PRINT ''TRUNCATE TABLE ?'''

Se a sua plataforma de base de dados suporta as visualizações INFORMATION_SCHEMA, pegue os resultados da seguinte consulta e execute-os.

SELECT 'TRUNCATE TABLE ' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

Tente isto para o MySQL:

SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES

Adicionar um ponto-e-vírgula ao Concat facilita o uso, por exemplo, de dentro do mysql workbench.

SELECT Concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES
Comentários (10)

se utilizar o servidor sql 2005, existe um procedimento de armazenamento oculto que lhe permite executar um comando ou um conjunto de comandos contra todas as tabelas dentro de uma base de dados. Aqui é como você chamaria TRUNCATE TABLE com este procedimento armazenado:

EXEC [sp_MSforeachtable] @command1="TRUNCATE TABLE ?"

Aqui é um bom artigo que elabora mais.

Para o MySql, entretanto, você poderia usar o mysqldump e especificar as opções --add-drop-tables' e--no-data' para soltar e criar todas as tabelas ignorando os dados:

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE]

mysqldump use guide from dev.mysql

Comentários (0)

Uma ideia poderia ser simplesmente largar e recriar as mesas?

EDIT:

@Jonathan Leffler: Verdade

**Outra sugestão*** (ou caso não precise de truncar TODAS as tabelas):

Porque não criar apenas um procedimento básico de armazenamento para truncar tabelas específicas

CREATE PROCEDURE [dbo].[proc_TruncateTables]
AS
TRUNCATE TABLE Table1
TRUNCATE TABLE Table2
TRUNCATE TABLE Table3
GO
Comentários (2)