在删除数据库中的数据时,常常会存在这样几种情况:

  • 已经确定删除整张表和数据,也不需要恢复数据了,用 drop;

  • 删除数据不删除表,但是删除之后还有可能会后悔,用 delete;

  • 只想删除数据,不用删除表,删除数据后不会后悔了,用 truncate;

  • 执行速度:drop> truncate > delete

用法

  • DROP TABLE 表名;

drop 是直接将表格删除,无法找回。将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);

  • DELETE FROM 表名;

delete 可以和 where 子句连用删除指定行;

delete 的效果相当于一行行删除,所以可以 rollback;

delete 不会删除索引 (新插入的数据将在删除数据的索引后继续增加);

  • TRUNCATE TABLE 表名;

truncate 是删除表中所有数据,但不能与 where 一起使用;

truncate 删除后不记录 mysql日志,因此不可以 rollback,更不可以恢复数据;

truncate 删除后将重建索引;

truncate 不会触发任何 DELETE触发器;

外键约束无法删除

如有有外键约束,无法删除时,可以临时关闭外键约束,更详细的关于关闭外键约束的,请看 一些实用查询-->外键约束关闭

SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE pcc_telescope_entries;
TRUNCATE TABLE pcc_telescope_entries_tags;