(1)用法不同
drop
(丢弃数据):drop table 表名
,直接将表结构都删除掉,在删除表的时候使用。truncate
(清空数据) :truncate table 表名
,只删除表中的数据,再插入数据的时候自增长 id 又从 1 开始,在清空表中数据的时候使用。delete
(删除数据) :delete from 表名 where 列名=值
,删除某一行的数据,如果不加where
子句和truncate table 表名
作用类似。
(2)属于不同的数据库语言
truncate
和drop
属于 DDL(数据定义语言)语句,操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。delete
语句是 DML (数据库操作语言)语句,这个操作会放到 rollback segment 中,事务提交之后才生效。
(3)执行速度不同
delete
命令执行的时候会产生数据库的binlog
日志,而日志记录是需要消耗时间的,但是也有个好处方便数据回滚恢复。truncate
命令执行的时候不会产生数据库日志,因此比delete
要快。除此之外,还会把表的自增值重置和索引恢复到初始大小等。drop
命令会把表占用的空间全部释放掉。
一般来说:drop
> truncate
> delete