一、簡介
最近在項目發版測試的時候,導出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:
推薦使用第二種方法,更加簡單方便,但是如果在生產環境中的話,凡是涉及到刪除數據的都要謹慎操作,防止用戶的數據丟失,如果大家在有需要清空數據的時候可以考慮使用該方法。
---------------------