-- 示例:自增ID变化INSERTINTO test (name)VALUES('A');-- id=1TRUNCATETABLE test;INSERTINTO test (name)VALUES('B');-- id=1(重置)DELETEFROM test;INSERTINTO test (name)VALUES('C');-- id=2(继续递增)
5. 触发器与外键约束
DELETE:
触发 BEFORE DELETE/AFTER DELETE 行级触发器。
TRUNCATE 和 DROP:
不触发任何触发器(DDL 操作)。
外键约束:
TRUNCATE 可能被外键阻塞(需先禁用约束)。
DELETE 可配合 ON DELETE CASCADE 级联删除。
使用场景建议
场景
推荐操作
原因
彻底销毁表(含结构)
DROP
一次性清理表及其依赖
快速清空大表所有数据
TRUNCATE
高性能且重置自增ID
删除部分数据(带条件过滤)
DELETE + WHERE
精确控制删除范围
需事务回滚的删除操作
DELETE
支持 ROLLBACK 撤销
清空表但保留自增ID当前值
DELETE
TRUNCATE 会重置 ID
经典示例
场景 1:清理测试数据
-- 快速清空测试表(无需回滚)TRUNCATETABLE test_data;
场景 2:删除特定用户
-- 精确删除(可回滚)BEGINTRANSACTION;DELETEFROM users WHERE last_login <'2020-01-01';COMMIT;-- 或 ROLLBACK 撤销
场景 3:废弃整个模块表
-- 彻底删除表(谨慎操作!)DROPTABLE obsolete_module;
总结口诀
砍头用 DROP(彻底消失)
清空用 TRUNCATE(快速重置)
精准删除用 DELETE(可回滚+条件过滤)
💡 终极忠告:
生产环境慎用 DROP 和 TRUNCATE(无后悔药)!
删前先备份:BACKUP TABLE table_name TO '/path'(MySQL)或导出数据。