1、drop (删除表):删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表。
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
2、truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。与drop不同的是,只是清空表数据而已。
注意:truncate 不能删除行数据,要删就要把表清空。
3、delete (删除表中的数据):delete 语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存
以便进行进行回滚操作
例子:DELETE删除语句
DELETE FROM table_name
WHERE condition;
DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';
2.truncat语句
[ { database_name.[ schema_name ]. | schema_name . } ]
table_name
[ ; ]
3.drop语句
DROP TABLE table_name
DROP DATABASE database_name
truncate注意事项
无论怎样,truncate表都是高危操作,特别是在生产环境要更加谨慎使用,下面列出几点注意事项。
Truncate Table 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 Delete 。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
对于由 Foreign Key (外键) 约束引用的表,不能使用 Truncate Table,而应使用不带 Where子句的 Delete 语句。由于 Truncate Table 不记录在日志中,所以它不能激活触发器。
Truncate Table 不能用于参与了索引视图的表。
对用 Truncate Table 删除数据的表增加数据时,要使用Update Statistics 来维护索引信息。
如果有 Rollback 语句,Delete 操作将被撤销,但 Truncate 不会撤销。
执行 Truncate 需要 drop权限,不建议给账号drop权限;执行 Truncate 前一定要再三检查确认,最好提前备份下表数据。
综合比较:
要删除表用Drop;若想保留表而将表中数据删除,如果于事务无关,用truncate即可实现。如果和事务有关,或是想触发trigger,还是用delete。
在没有备份情况下,谨慎使用Drop 与 Truncate。要删除部分数据行采用Delete且注意结合where来约束影响范围。回滚段要足够大。
Truncate TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 Delete。如果要删除表定义及其数据,请使用 Drop TABLE 语句。
TruncateE只能对TABLE,Delete可以是TABLE和VIEW,Truncate和Delete只删除数据,Drop则删除整个表(结构和数据)。
总结:
1、在速度上,一般来说,drop> truncate > delete。
2、在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。
3、如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;