TRUNCATE来自数据库中所有表的数据

时间:2016-03-14 06:31:18

标签: mysql sql database truncate

对于某些工作,要求是我们希望保留表和数据库结构,同时一次性截断多个表中的所有数据。 由于Truncate Table_name仅截断一个表。有没有办法截断多个表?帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

最简单的方法可能如下:

如果您有外键约束,则暂时将其设置为OFF

SET FOREIGN_KEY_CHECKS=0;

再次设置ON

SET FOREIGN_KEY_CHECKS=1;

截断特定数据库下的所有表格

SELECT 
CONCAT('TRUNCATE TABLE ',TABLE_NAME,';') AS truncateCommand
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME_HERE';

截断所有数据库中的所有表格

SELECT 
    CONCAT('TRUNCATE TABLE ',TABLE_NAME,';') AS truncateCommand
    FROM information_schema.TABLES;

你会得到这样的输出:

TRUNCATE TABLE your_table_1;
TRUNCATE TABLE your_table_2;
TRUNCATE TABLE your_table_3;
TRUNCATE TABLE your_table_4;
TRUNCATE TABLE your_table_5;
TRUNCATE TABLE your_table_6;
TRUNCATE TABLE your_table_7;
TRUNCATE TABLE your_table_8;
.
.
etc..

现在抓住这些truncate命令并执行所有。

你可以这样做,以避免编写存储过程的麻烦,只有当它是一次性工作时才能完成它

答案 1 :(得分:0)

你在桌子上有关系吗?如果是这样,你不能截断表..但是要删除所有数据& Reseed Identity使用此查询

EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 
--Disable all triggers
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL' 
--Delete 
-- Then reseed if Table has identity column
EXEC sp_MSForEachTable 'IF (''?'' NOT LIKE  ''%CNF_tb%'')
                        BEGIN
                            DELETE from ? 
                            if @@RowCount >0
                            BEGIN
                                IF (Select  OBJECTPROPERTY(OBJECT_ID(''?''),''Tablehasidentity'') 
                                    FROM    Sys.Tables 
                                    Where   object_id=OBJECT_ID(''?''))=1
                                BEGIN
                                    DBCC CHECKIDENT(''?'' ,Reseed,0) 
                                END
                            END
                        END 
                        ELSE
                        BEGIN
                            Select ''?'' as ''Not Changed''
                        END'


--Enable all constraints
EXEC sp_MSForEachTable 'ALTER TABLE ? With Check CHECK CONSTRAINT ALL' 
--Enable all triggers
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'