在 MySQL 中,有三种常用的方式可以删除表中的数据或整个表,它们分别是 TRUNCATE、DROP 和 DELETE。
TRUNCATE TABLE属于DDL语言,不走事务,数据不会回滚
TRUNCATE TABLE 语句会删除表中的所有数据,但保留表的结构,同时重置自增主键,释放空间
语法:
TRUNCATE TABLE table_name;
DROP TABLE属于DDL语言,不走事务,数据不会回滚
DROP TABLE 语句会完全删除表,包括表的结构和其中的数据。它会永久删除表,立即释放空间,无法撤销。
语法:
DROP TABLE [IF EXISTS] table_name;
如果指定了 IF EXISTS,则在表不存在时不会报错,直接返回操作成功。例如,DROP TABLE IF EXISTS employees; 将删除名为 employees 的表,如果该表存在的话。
DELETE属于DML操作语言,只会删除数据不会删除表结构,会走事务,可回滚
DELETE 语句用于逐行删除表中的数据,可以根据指定的条件删除特定的行。
语法:
DELETE FROM table_name [WHERE condition];
DELETE 语句是一种较为慢速和资源密集的操作,因为它将逐行删除表中的数据,并且会触发事务日志和触发器等操作。如果只是想删除表中的数据而不是整个表,TRUNCATE TABLE 操作通常更快和更高效。
使用 DELETE 语句删除表中的数据并不会立即释放磁盘空间,当你执行 DELETE 语句删除行时,实际上是将这些行标记为已删除,但数据仍然占用磁盘空间。
如果你希望立即释放磁盘空间,可以使用 OPTIMIZE TABLE 命令。该命令将重建表,并且可以压缩表的数据,从而释放已删除行所占用的空间。