天天看點

操縱資料表(DML)之删除資料DELETE

一、DELETE 語句

使用注意事項:

1、DELETE語句隻會删除整條記錄,而不能對記錄中的某個字段進行删除;

2、删除一行資料時可能導緻與其他表的引用完整性出現問題,一次必須注意删除的順序;

3、DELETE語句知識删除表中的資料,并不會對整個表進行移除工作,移除使用FROP TABLE語句。

4、DELETE語句在删除資料時會産生回退日志資訊,是以可以使用事務復原ROLLBACK語句進行恢複。

文法如下:

DELETE 删除行的文法如下:

DELETE [FROM] table [WHERE condition];
           

如果删除的記錄所在的表有外鍵,需要按照順序删除,先删除副表記錄,再删除主表記錄。

二、使用TRUNCATE 清空表資料

TRUNCATE 可以快速删除表資料,但是不可以復原事(ROLLBACK)務進行恢複資料。

TRUNCATE 實際并不是DML資料操作語言的一部分,他還是屬于DDL資料定義語言,與CREATE TABLE 等語句一樣,并具有撤銷功能。文法如下:

TRUNCATE TABLE [schema.] table
    [ {PRESERVE | PURGE} MATERIALLZED VIEW LOG ]
    [ {DROP [ ALL ] | REUSER } STORAGE ];
           

其中PRESERVE和PURGE指定是否在截斷表時,同時保留或清除與表相關的物化視圖日志,預設PRESERVE,表示保留。STORAGE子句指定存儲選項,訓示是否在清空表時,也連帶地将對表配置設定的空間回收。其中FROP STORAGE 是預設值,用來将為表已經配置設定的表空間回收給表空間一遍其他的表可以使用,否則隻能讓表自己使用這部分空間。而REUSER STORAGE 則是讓表重用這不風空間,可以減少重新為表插入資料時的空間配置設定過程。使用時注意:

1、不能夠復原使用的TRUNCATE TABLE 清空的表;

2、不能夠使用FLASHBBACK TABLE 閃回恢複到使用TRUNCATE TABLE 之前的狀态;

3、不能夠清空屬于一個聚簇一部分的一個表,必須是清空一個簇、殺出來自表的所有航資料,或者是删除并重建一個表。

4、如果一個表具有主外鍵關系,在清空表之前必須先禁用掉限制,如果是一個自引用限制的表,那麼可以使用TRUNCATE TABLE進行清除而無須禁用限制。

三、使用MERGE合并表資料

MEGER 是一個組合指令,它可以組合INSERT 、UPDATE 和DELETE 來合并來源資料到目标表。他是一個決策性的語句,通過他,可以從一個或多個資料源中選擇詩句,然後依照指定的條件進行比對,已決定是否對表或視圖執行INSERT 、UPDATE 或DELETE 操作。文法如下

MEGER [hint]
    INTO [ schema. ] { table | view } [ t_alias ]      --要合并的目标表
    USING { [ schema. ] {table | view } | subquery }  [ t_alias ]    --要合并的來源表或者一個子查詢
    ON (condition)                --指定要比較的條件
WHEN MATCHED THEN                 --如果條件比對,可以進行更新或者删除的操作
UPDATE SET column = { expr | DEFAULT }
           [ , column = { expr | DEFAULT } ]...
WHERE condition
[ DELETE where_clause ]
WHEN NOT MATCHED THEN             --如果條件不比對,可以進行删除、插入的操作
INSERT [ (column [, column ]... ) ]
VALUES ({ expr | DEFAULT } [, { expr | DEFAULT }] ...)
WHERE condition
LOG ERRORS
    [INTO [ schema. ] table ]
    [ (simple_expression) ]
    [ REJECT LIMIT { integer | UNLIMITED } ]
           
操縱資料表(DML)之删除資料DELETE
操縱資料表(DML)之删除資料DELETE
操縱資料表(DML)之删除資料DELETE