1. DELETE FROM tb_class(表名);
2. TRUNCATE tb_class(表名);
3. DROP TABLE tb_class(表名);
上面三种方法都可以达到清空表tb_class的数据。但是它们之间有什么区别呢?
- 表结构
TRUNCATE和DELETE只会删除表数据,不会删除表结构
DROP会删掉整张表,不止表数据,表结构也会跟着删掉,即约束(constrain)、触发器(trigger)、索引(index)被删除,但是依赖于该表的存储过程/函数将保留,只是被变为invalid状态.。 - 触发器(trigger)
DELETE会触发触发器
TRUNCATE和DROP不会触发触发器 - 回滚
DELETE可以进行事务回滚,以恢复数据,是DML
TRUNCATE和DROP不能进行事务回滚,是DDL - 表空间
TRUNCATE缺省情况下将空间释放到 minextents个 extent
DROP将表所占用的空间全部释放
DELETE不影响表所占用的extent
如果一个表中有自增字段,使用truncate table时这个自增字段将起始值恢复成1,而用DELETE删除所有记录后,起始值不会恢复成1,而是会从上次删除之前的值往下增加 - 速度
DROP > TRUNCATE > DELETE