文章目录

  • 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 表名;