SQL之CURD操作(二)

删除数据

T-SQL提供两种从表中删除数据行的语句:DELETE和TRUNCATE

DELETE 语句是标准的SQL语句,它用于根据谓词删除表中的数据。

DELETE采用的是完整模式的日志处理,当删除大量数据时,可能会花费大量时间。

 

TRUNCATE不是标准的SQL语句,它用于删除表中所有数据,与DELETE不同的是,它采取的是最小模式记录日志,在性能上它们有很大差异。例如:删除几百万条数据时,使用TRUNCATE只需要几秒钟,而DELETE则需要几分钟甚至几小时。

当表中有标识列时,TRUNCATE会清除标识种子,而DELETE不会清除。

 

由于TRUNCATE语句执行速度非常快,因为有时具有一定的危险性。当清空表时搞错了要操作的表,类似的事情时有发生。

为避免发生这样的事故,可以简单地创建一个虚拟表(dummy table),以便于可以及时回滚。

 

T-SQL支持一种基于联接的语法,由于联接本身具有过滤的作用,因为它有一个基于谓词的过滤器(ON子句)。通过连接可以访问另一个表中相关的属性(列),并在WHERE子句中引用这些属性。

例如:

删除所有中国客户的订单

DELETE FROM O

FROM T_Order AS O

JOIN T_Customer AS C

ON O.CustID = C.CustID

WHERE C.Country = 'China'

 

也可以改成EXISTS+子查询的形式

DELETE FROM T_Order

WHERE EXISTS(

SELECT * FROM T_Customer AS C

WHERE C.CustID = T_Order.CustID AND C.Country = 'China'

)

你可能感兴趣的:(数据库,SQL)