Drop、Delete與Trunc的區(qū)別和應(yīng)用方式
在Oracle數(shù)據(jù)庫中,DROP
、 DELETE
、TRUNCATE
都可以用來處理表的數(shù)據(jù),但是功能和效果是不同的。
以下是它們之間的區(qū)別以及如何來進行恢復(fù)數(shù)據(jù)。
1. DROP 表
功能:DROP
表會完全刪除表的結(jié)構(gòu)和數(shù)據(jù),表以及相關(guān)的索引、約束等都會被永久刪除,無法通過簡單的 SQL 語句恢復(fù)。
語法:
DROP TABLE table_name;
后果:使用 DROP TABLE
后,表及其所有數(shù)據(jù)將被永久刪除,除非使用了數(shù)據(jù)庫的備份或閃回技術(shù)來恢復(fù)。
2. DELETE 表
功能:DELETE
語句用于刪除表中的數(shù)據(jù),但保留表的結(jié)構(gòu)(表定義、索引、約束等)。你可以選擇性地刪除所有數(shù)據(jù)或根據(jù)條件刪除部分數(shù)據(jù)。
語法:
DELETE FROM table_name WHERE id='1001';
或刪除所有數(shù)據(jù):
DELETE FROM table_name;
后果:DELETE
僅刪除數(shù)據(jù),表結(jié)構(gòu)仍然保留,可以繼續(xù)向表中插入數(shù)據(jù)。如果沒有使用 WHERE
條件,DELETE
會刪除表中的所有數(shù)據(jù)。被刪除的數(shù)據(jù)可以通過 COMMIT
前的 ROLLBACK
操作來恢復(fù)。
3. TRUNCATE 表
功能:TRUNCATE
也是刪除表中所有數(shù)據(jù),但比 DELETE
快且無法回滾。表結(jié)構(gòu)保留。
影響:無法通過 ROLLBACK
恢復(fù),數(shù)據(jù)刪除后直接提交。
語法:
TRUNCATE TABLE table_name;
4. 恢復(fù)數(shù)據(jù)
- 對于
DROP
Table:
如果你誤刪了表,可以通過 Oracle 的 閃回技術(shù)(Flashback Technology) 來恢復(fù)表,但前提是數(shù)據(jù)庫啟用了閃回功能,且滿足相關(guān)條件。
閃回表 示例:
FLASHBACK TABLE table_name TO BEFORE DROP;
這種方法可以恢復(fù)最近被刪除的表。
- 對于
DELETE
和TRUNCATE
Table:
如果在執(zhí)行 DELETE
語句后尚未提交(即未執(zhí)行 COMMIT
),可以使用 ROLLBACK
命令來撤銷刪除操作:
ROLLBACK;
如果已經(jīng)提交了事務(wù),數(shù)據(jù)將無法通過 ROLLBACK
恢復(fù)。但可以通過 閃回查詢(Flashback Query) 來恢復(fù)表的某個時間點的數(shù)據(jù),前提是表的行移動(ROW MOVEMENT)已啟用。
閃回查詢 :
SELECT * FROM table_name AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);
將閃回查詢結(jié)果插入表中 :
INSERT INTO SELECT * FROM table_name AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);
- 表空間恢復(fù):
如果需要恢復(fù)一個被 DROP
的表,且閃回不可用,還可以使用數(shù)據(jù)泵或其他備份和恢復(fù)工具來恢復(fù)整個表空間。
- 從備份恢復(fù):
如果沒有使用閃回技術(shù)或啟用了相應(yīng)的恢復(fù)機制,恢復(fù)方法通常是從全庫或部分備份中還原被刪除的表或數(shù)據(jù)。
總結(jié)
DROP
會刪除整個表結(jié)構(gòu)及數(shù)據(jù),無法回滾,但可以使用閃回或備份恢復(fù)。DELETE
只刪除數(shù)據(jù)而保留表結(jié)構(gòu),操作可以回滾(如果未提交),可通過閃回或備份恢復(fù)數(shù)據(jù)。TRUNCATE
快速刪除表中所有數(shù)據(jù),不可回滾,恢復(fù)手段同DELETE
。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle?VM?VirtualBox?Ubuntu設(shè)置共享文件夾方式
這篇文章主要介紹了Oracle?VM?VirtualBox?Ubuntu設(shè)置共享文件夾方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06Oracle實現(xiàn)查詢2個日期所跨過的月份列表/日期列表的方法分析
這篇文章主要介紹了Oracle實現(xiàn)查詢2個日期所跨過的月份列表/日期列表的方法,結(jié)合實例形式分析了Oracle日期相關(guān)查詢與運算相關(guān)操作技巧,需要的朋友可以參考下2019-09-09Oracle 數(shù)據(jù)庫管理腳本命名規(guī)范
Oracle 數(shù)據(jù)庫管理腳本命名規(guī)范...2007-03-03oracle中fdisk導(dǎo)致的ASM磁盤數(shù)據(jù)丟失的解決方法
oracle中fdisk 導(dǎo)致的ASM磁盤數(shù)據(jù)丟失 有需要的朋友可參考一下2012-10-10oracle 存儲過程詳細介紹(創(chuàng)建,刪除存儲過程,參數(shù)傳遞等)
這篇文章主要介紹了oracle 創(chuàng)建,刪除存儲過程,參數(shù)傳遞,創(chuàng)建,刪除存儲函數(shù),存儲過程和函數(shù)的查看,包,系統(tǒng)包等相關(guān)資料,需要的朋友可以參考下2014-06-06Oracle數(shù)據(jù)庫中字符串截取最全方法總結(jié)
Oracle提供了多種截取字符串的操作方法,可以根據(jù)具體需求選擇合適的方法進行操作,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Oracle數(shù)據(jù)庫中字符串截取的最全方法,需要的朋友可以參考下2024-03-03ORA-02298: 無法驗證 (約束)提示未找到父項關(guān)鍵字的解決辦法
這篇文章主要介紹了ORA-02298: 無法驗證 (約束)提示未找到父項關(guān)鍵字的解決辦法,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下2016-09-09