1、区别
drop (删除表):删除内容和定义,释放空间
把整个表去掉,以后要 新增数据是不可能的,除⾮新增⼀个表。 drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引 (index),依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。 如果要删除表定义及其数据,请使⽤ drop table 语句。
truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)
与drop不同的是,只是清空表数据⽽已。 注意:truncate不能删除具体⾏数据,要删就要把整个表清空了。
truncate与不带where的delete是一样的
delete (删除表中的数据):delete 语句⽤于删除表中的⾏
delete语句执⾏删除的过程是每次从表中删除⼀⾏,并且同时将该⾏的删除操作作为事务记录在⽇志中保存,以便进⾏进⾏回滚操作。
2、其它
- 对于由foreign key约束引⽤的表,不能使⽤truncate table ,⽽应使⽤不带where⼦句 的delete语句。
- delete属于SQL的DML,事务提交的时候生效;truncate、drop 是数据库定义语⾔(ddl),操作⽴即⽣效。
- 如果有⾃增列,truncate⽅式删除之后,⾃增列的值会被初始化,delete⽅式要分情 况(如果数据库被重启了,⾃增列值也会被初始化,数据库未被重启,则不变)