文章目录
- drop
- truncate
- delete
drop
- 删除程度:最彻底
- drop 丢弃,既删表数据,又删表结构,立即释放磁盘空间
- DDL 语句(数据定义语言),一次性删除所有数据,并不会把删除操作记录在日志中,不可进行回滚
- 针对于表,删表最彻底,结构数据磁盘全清理
- 建议:没有备份时,慎用!
DROP TABLE 表名;truncate
-
删除程度:一般彻底
-
truncate 删除表数据,保留表结构,索引占用的空间恢复到初始值大小,立即释放磁盘空间。
-
DDL 语句(数据定义语言),一次性删除所有数据,并不会把删除操作记录在日志中,不可进行回滚
-
执行速度快,比 delete 删表数据快。
-
只针对于表去执行
-
对于外键约束的表用 truncate 不能删除,应用 delete
-
建议:没有备份时,慎用!如果想删数据,保留表结构可以用 truncate
TRUNCATE TABLE 表名;delete
- 删除程度:最不彻底(保留了表结构,空间也没释放)
- 对于 innodb 存储引擎来说,不管是删除表,还是依据条件删除行,都是数据被删除,表结构不变,不会立即释放磁盘空间,不会减少索引所占用的空间。
- DML 语句(数据维护语言),delete 会把删除操作作为事务记录在日志中保存,这样 delete 可以实现回滚
- 比 truncate 删除慢,因为 delete 每删除一行就会在事务日志中为删除的每行记录一项,
- 即可针对于表,又可针对于视图
-- 删除表,MyISAM 会立即释放磁盘空间,InnoDB 不会 DELETE FROM 表名; -- 依据条件删除行数据,都会立即释放磁盘空间 DELETE FROM 表名 WHERE 列='值';
使用 optimize 会立即释放磁盘空间
OPTIMIZE TABLE 表名;