delete
- 只删除表中数据,不删除表结构,可以与where连用,删除特定行;
- 记录日志
- 可以rollback恢复数据
- 不删除索引
- 返回删除的记录数
eg: delete from user where id=1;
truncate
相当于不加where的delete
- 删除表中所有数据,但不能与where一起使用;
- 保留表结构
- 不记录日志
- 不可以恢复数据
- 重建索引
- 速度比delete快,使用的系统和事务日志资源少
- 返回0(成功)或-1(失败)
eg: truncate table user;
drop
直接将数据以及表结构删除,无法找回。
eg: drop table user;
使用场景
删除程度由强到弱:
drop > truncate > delete
- 想删除部分数据行用delete,注意带上where子句,回滚段要足够大;
- 想删除表,用drop
- 想保留表而将所有数据删除,如果和事务无关,用truncate;如果和事务有关,或者想触发trigger,用delete。