一、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 } ]