数据的删除
# 110.数据的删除
如果想将整个表删掉,可以使用DROP TABLE 语句,但如果只想删除表中的数据,需使用DELETE 语句。
# DROP TABLE
和 DELETE
两者的区别:
① DROP TABLE
** 语句** 可以将表完全删除。删除之后再想插入数据,就必须使用 CREATE TABLE
语句重新创建。
② DELETE
** 语句** 会留下表(容器),而删除表中的全部数据,因此可以通过 INSERT
语句再次向表中插入数据。
本节就是重点介绍delete语句。不管使用哪种方法删除数据,都要慎重,一旦误删,恢复数据是十分困难的。
# DELETE 语句的基本语法
基本语法:
DELETE FROM <表名>;
使用该语句,就会删除表中的全部数据。
例如清空 Product 表:
DELETE FROM Product;
注意:
- 如果忘了写 FROM,会出错。原因是删除对象不是表,而是表中的数据行(记录)。这样想的话就很容易理解了吧 。
- 如果写了多余的列名,也会出错,因为 DELETE 语句的对象是行而不是列,所以 DELETE 语句无法只删除部分列的数据(要删除列请使用alter)
与 INSERT 语句相同,数据的更新也是以记录为基本单位进行的。下一节将要学习的 UPDATE 语句也是如此。
# 为delete指定条件
想删除部分数据行时,可以像 SELECT 语句那样使用 WHERE 子句指定删除条件。语法:
DELETE FROM <表名>
WHERE <条件>;
2
3
假设我们要删除销售单价(sale_price )大于等于 4000 日元的数据:
DELETE FROM Product
WHERE sale_price >= 4000;
2
3
与 SELECT 语句不同的是,DELETE 语句中不能使用 GROUP BY 、 HAVING 和 ORDER BY 三类子句,而只能使用 WHERE 子句。
这也很好理解,GROUP BY 和 HAVING是用来分组展示数据的,而ORDER BY是用来排序的,在删除表中数据时它们都起不到什么作用。
# truncate
标准 SQL 中用来从表中删除数据的只有 DELETE 语句。
但是,很多数据库产品中还存在另外一种被称为 truncate 的语句。这些产品主要包括 Oracle、SQL Server、PostgreSQL、MySQL 和 DB2。truncate 是舍弃的意思,使用方法:
TRUNCATE <表名>;
truncate只能删除表中的全部数据,不能指定条件。也正是因此,它删除数据比delete快很多。在需要删除全部数据行时,使用 truncate可以缩短执行时间。
此外,产品不同需要注意的地方也不尽相同。例如在 Oracle 中,把 TRUNCATE 定义为 DDL,而不是 DML。
因此,Oracle 中的 TRUNCATE 不能使用 ROLLBACK (事务的操作,后续会讲)。执行 TRUNCATE 的同时会默认执行 COMMIT 操作。
使用 TRUNCATE 时,请大家仔细阅读使用手册,多加注意,便利的工具往往还是会存在一些不足之处的。
(完)