一、简介
最近在项目发版测试的时候,导出dmp的时候不小心把开发库中的一些脏数据导出来了,测试那边导入进去之后一堆不规范的数据,为了不影响测试结果,于是总结了一个快速清空数据库数据表所有数据的方法。
二、方法
(1). 第一种方法:分步骤实现
【a】第一步:禁止所有的外键约束.
打开plsql ,新建一个查询窗口,输入:
SELECT \'ALTER TABLE \' || table_name || \' disable CONSTRAINT \' ||
constraint_name || \';\'
FROM user_constraints
where CONSTRAINT_TYPE = \'R\';
打开能执行sql的窗口即可
【b】第二步:用delete或truncate删除所有表的内容
SELECT \'DELETE FROM \' || table_name || \';\'
FROM USER_TABLES
ORDER BY TABLE_NAME;
【c】第三步:启用所有的外键约束
SELECT \'ALTER TABLE \' || table_name || \' enable CONSTRAINT \' ||
constraint_name || \';\'
FROM user_constraints
where CONSTRAINT_TYPE = \'R\';
依次执行完这三个步骤之后,发现数据库中所有的数据表的数据都清空。
(2).第二种方法:执行脚本生成的sql,然后统一执行
【a】打开plsql查询窗口,执行如下plsql脚本
begin
dbms_output.put_line(\'--禁用外键SQL【开始】\');
for var1 in (SELECT \'ALTER TABLE \' || table_name || \' disable CONSTRAINT \' ||
constraint_name || \';\' as sqltext
FROM user_constraints
where CONSTRAINT_TYPE = \'R\') loop
dbms_output.put_line(var1.sqltext);
end loop;
dbms_output.put_line(\'--禁用外键SQL【结束】\');
dbms_output.new_line;
dbms_output.put_line(\'--删除表记录SQL【开始】\');
for var1 in (SELECT \'DELETE FROM \' || table_name || \';\' as sqltext
FROM USER_TABLES
ORDER BY TABLE_NAME) loop
dbms_output.put_line(var1.sqltext);
end loop;
dbms_output.put_line(\'--删除表记录SQL【结束】\');
dbms_output.new_line;
dbms_output.put_line(\'--启用外键SQL【开始】\');
for var1 in (SELECT \'ALTER TABLE \' || table_name || \' enable CONSTRAINT \' ||
constraint_name || \';\' as sqltext
FROM user_constraints
where CONSTRAINT_TYPE = \'R\') loop
dbms_output.put_line(var1.sqltext);
end loop;
dbms_output.put_line(\'--启用外键SQL【结束】\');
dbms_output.new_line;
end;
【b】然后在output这个tab中复制出所有的sql
【c】统一执行sql:
推荐使用第二种方法,更加简单方便,但是如果在生产环境中的话,凡是涉及到删除数据的都要谨慎操作,防止用户的数据丢失,如果大家在有需要清空数据的时候可以考虑使用该方法。
---------------------