PL/SQL

PL/SQL 知识量:16 - 57 - 244

4.4 删除数据><

删除操作的基本语法- 4.4.1 -

当不再使用表中的记录时,可以使用DELETE语句将其删除。使用DELETE语句可以一次删除一条或多条记录,而且可以使用WHERE子句指定删除条件。DELETE命令的基本语法如下:

DELETE [FROM] table_or_view_name
WHERE search_condition

其中,FROM为可选的关键词,可用在DELETE关键词与目标table_or_view_name之间。

如果要删除表中的所有行,请使用未指定WHERE子句的DELETE语句,或者使用TRUNCATE TABLE语句。TRUNCATE TABLE比DELETE执行速度快,且使用的系统和事务日志资源少。

使用DELETE语句时,应注意以下几点:

  • DELETE语句不能删除单个字段的值,它只能删除整行数据。要删除单个字段的值,可以使用UPDATE语句,将其更新为NULL。

  • 使用DELETE语句仅能删除记录即表中的数据,不能删除表本身。要删除表,需要使用DROP TABLE语句。

  • 同INSERT和UPDATA语句一样,从一个表中删除记录将引起其他表的参照完整性问题。

删除数据的示例- 4.4.2 -

DELETE语句可以删除数据库表中的单行数据、多行数据以及所有行数据。另外,与UPDATE语句一样,也可以使用FROM子句根据其他表的信息删除目标表的记录行,还可以在WHERE子句中通过子查询删除数据。下面是一个示例:

SQL> select * from books;

        ID NAME            PRICE
---------- ---------- ----------
         1 SQL                50
         2 MySQL              32
         3 CSS                41

SQL> delete from books where price>45;

1 row deleted


SQL> select * from books;

        ID NAME            PRICE
---------- ---------- ----------
         2 MySQL              32
         3 CSS                41

TRUNCATE的使用- 4.4.3 -

使用TRUNCATE TABLE语句可以删除表中的所有行,而不记录单个行删除操作。其使用语法如下:

TRUNCATE TABLE table_name

下面的示例将清空books表:

SQL> select * from books;

        ID NAME            PRICE
---------- ---------- ----------
         2 MySQL              32
         3 CSS                41

SQL> truncate table books;

Table truncated


SQL> select * from books;

        ID NAME            PRICE
---------- ---------- ----------

虽然BOOKS表中的数据均被删除,但表结构并没有被删除,即BOOKS表仍然存在,这与删除表的DROP TABLE语句是不同的。

虽然使用DELETE语句和TRUNCATE TABLE语句都能够删除表中的所有数据,但是使用TRUNCATE TABLE语句比使用DELETE语句的执行效率要高。这是因为:使用DELETE语句,系统将一次一行地处理要删除的表中的记录,在从表中删除行之前,在事务处理日志中记录相关的删除操作和删除行中的列值,以便在删除失败时,可以使用事务处理日志来恢复数据。

使用TRUNCATE TABLE语句则一次性完成删除与表有关的所有数据页的操作。另外, TRUNCATE TABLE语句并不更新事务处理日志。因此,使用TRUNCATE TABLE语句从表中删除行后,将不能用ROLLBACK命令取消行的删除操作。