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

Mysql 截断数据库中所有表中的数据,mysql,sql,database,truncate,Mysql,Sql,Database,Truncate,对于某些工作,我们需要保留表和数据库结构,同时一次性截断多个表中的所有数据。 因为Truncate Table_name一次只截断一个表。有办法截断多个表吗?我们将不胜感激 您的表中有关系吗?如果是这样,则无法截断表。。但是,要删除所有数据和重新设定种子标识,请使用此查询 EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' --Disable all triggers EXEC sp_MSForEachTable 'ALT

对于某些工作,我们需要保留表和数据库结构,同时一次性截断多个表中的所有数据。
因为Truncate Table_name一次只截断一个表。有办法截断多个表吗?我们将不胜感激

您的表中有关系吗?如果是这样,则无法截断表。。但是,要删除所有数据和重新设定种子标识,请使用此查询

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'

最简单的方法可能是:

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

设置外键检查=0

要再次将其设置为打开,请执行以下操作:

设置外键检查=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命令并执行所有命令


当且仅当存储过程是一次性作业时,您可以通过这种方式避免编写存储过程以完成此任务的麻烦。

表之间是否存在外键关系?@1000111否它不存在每次截断都是一个事务。你不能在一次交易中完成是的,我不能在一次交易中完成。你说得对@BerndBuffen@BerndBuffen您可以找到答案[在单个事务中实现它]