12.2 删除表中的数据 - 《精通SQL——结构化查询语言详解》 - 免费试读 - bo...
12.2.1 DELETE语句基本语法
使用DELETE语句从数据库删除数据,基本语法如下。
DELETE FROM table_name
WHERE search_condition
说明:该语句将从表中删除符合条件的数据行,如果没有WHERE语句,则删除所有数据行。通过使用DELETE语句的WHERE子句,SQL可以删除单行数据、多行数据以及所有行数据。使用DELETE语句时,应注意以下几点。
DELETE语句不能删除单个字段的值,只能删除整行数据。要删除单个字段的值,可以采用上节介绍的使用UPDATE语句,将其更新为NULL。
使用DELETE语句仅能删除记录即表中的数据,不能删除表本身。要删除表,需要使用前面介绍的DROP TABLE语句。
同INSERT和UPDATA语句一样,从一个表中删除记录将引起其他表的参照完整性问题。这是一个潜在问题,需要时刻注意。
注意
在DELETE语句中没有指定列名,这是因为不能从表中删除单个列的值,只能整行删除。如果需要删除特定的列值,应使用UPDATE语句将该值设置为NULL,当然,前提是该列没有NOT NULL约束,具体操作可参加12.1.2节的例程。
12.2.2 DELETE语句删除单行数据
DELETE语句可以删除数据库表中的单行数据、多行数据以及所有行数据。同时在WHERE子句中,也可以通过子查询删除数据。本节主要通过一个实例说明如何从表中删除单行数据。
实例9 DELETE语句删除单行数据
从New_Teacher2表中,删除教工号为8的教师记录。实例代码:
DELETE FROM New_Teacher2
WHERE TNO=8
查看表New_Teacher2的数据。
SELECT * FROM New_Teacher2
运行结果如图12.10所示。
图12.10 删除New_Teacher2表中教工号为8的教师记录
可见,教工号为8的教师记录已经被整行删除。
12.2.3 DELETE语句删除多行数据
与前面介绍的数据更新操作一样,可以在WHERE子句中设置各种搜索条件,也可以通过子查询或者多表连接的方式选择要删除的行。
实例10 DELETE语句删除多行数据
从New_Teacher2表中,删除工资低于所有教师平均工资的男教师的记录。
实例代码:
DELETE FROM New_Teacher2
WHERE TSEX=’男’
AND SAL < (SELECT avg(SAL)
FROM New_Teacher2)
查看表New_Teacher2的数据。
SELECT * FROM New_Teacher2
运行结果如图12.11所示。
可见,教工号为1和3的两位男教师记录已经被删除。
图12.11 删除New_Teacher2表中工资低于所有教师平均工资的男教师的记录
12.2.4 DELETE语句删除所有行
如果DELETE语句中,不包含WHERE子句,则该表的所有行都将被删除。
实例11 DELETE语句删除所有行
删除New_Teacher2表中的所有记录,代码如下:
DELETE FROM New_Teacher2
查看表New_Teacher2的数据。
SELECT * FROM New_Teacher2
运行结果如图12.12所示。
图12.12 删除New_Teacher2表中的所有记录
可以发现,New_Teacher2表中的所有记录都被删除了,但是New_Teacher2表本身(各个字段)还存在,并没有被删除。
12.2.5 TRUNCATE TABLE语句
从12.2.4节可以看到,使用没有WHERE子句的DELETE语句可以从表中删除所有的行。在SQL Server中,还提供了TRUNCATE TABLE语句,供用户删除表中的所有数据,同时又不删除表结构。TRUNCATE TABLE语句语法如下。
TRUNCATE TABLE table_name
虽然使用DELETE语句和TRUNCATE TABLE语句都能够删除表中的所有数据,但是使用TRUNCATE TABLE语句比用DELETE语句快得多,表现为以下两点。
使用DELETE语句,系统将一次一行地处理要删除的表中的记录,在从表中删除行之前,在事务处理日志中记录相关的删除操作和删除行中的列值,以防止删除失败时,可以使用事务处理日志来恢复数据。
TRUNCATE TABLE则一次性完成删除与表有关的所有数据页的操作。另外,TRUNCATE TABLE语句并不更新事务处理日志。由此,在SQL Server中,使用TRUNCATE TABLE语句从表中删除行后,将不能用ROLLBACK命令取消行的删除操作。
注意
TRUNCATE TABLE语句不能用于有外关键字依赖的表。
实例12 TRUNCATE TABLE语句删除表中的数据
删除New_Teacher表中的所有数据,代码如下。
TRUNCATE TABLE New_Teacher
查看删除数据后表New_Teacher中的数据。
SELECT * FROM New_Teacher
运行结果如图12.13所示。
图12.13 删除New_Teacher表中的所有数据
可见,表New_Teacher中的数据均被删除,但表结构并没有被删除,这与DROP TABLE语句是不同的。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。