首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >DELETE还是TRUNCATE?一张图秒懂清空表的正确姿势!

DELETE还是TRUNCATE?一张图秒懂清空表的正确姿势!

作者头像
PawSQL
发布2025-05-15 13:41:36
发布2025-05-15 13:41:36
2920
举报

📌 DELETE vs TRUNCATE 核心对比

  • DELETE:一行行删除,支持WHERE,灵活但慢。
  • TRUNCATE:直接清空整张表,速度快,不能加条件。

🎯 一句话总结: 灵活用DELETE,秒删用TRUNCATE!

🔥 各大数据库差异小科普

数据库

TRUNCATE能回滚?

重置自增ID?

MySQL

部分支持(InnoDB可)

✅ 是

PostgreSQL

✅ 支持事务回滚

✅ 是

Oracle

❌ 自动提交,不能回滚

✅ 是

SQL Server

✅ 支持事务回滚

✅ 是

🎯 一句话总结: 除了Oracle,大部分库的TRUNCATE都越来越安全!


🏎️ TRUNCATE为什么这么快?

  • 不生成每行删除日志,只记录表变化!
  • 表级锁定,避免锁竞争!
  • 清空物理页,部分库还能回收存储空间!

实测:

DELETE百万行需 20秒,TRUNCATE仅需 0.2秒!

🎯 一句话总结: TRUNCATE是“表重置”,DELETE是“慢慢搬家”!


⚡ 小心使用TRUNCATE的几大坑!

  • ❗ 不触发DELETE触发器
  • ❗ 自增列重置,从1重新开始
  • ❗ 有外键约束时不能直接TRUNCATE
  • ❗ 某些库(如Oracle)无法回滚!

🎯 一句话总结: 清空前,先问自己这4个问题!


🎯 清空表正确姿势总结

✅ 整表清空 → TRUNCATE优先 ✅ 条件删除 → DELETE必须 ✅ 重要操作前 → 务必备份!

🔔 最重要的一句话:

快速清表,用TRUNCATE;精准清理,用DELETE!


🎯 PawSQL的提示预警

当PawSQL检测到没有条件或是条件恒真的删除操作时,会提示用户将其重写为TRUNCATE语句。

🌟 本文小彩蛋:一图看懂

使用场景

推荐指令

清空整张小表

TRUNCATE

清空大表(数百万行)

TRUNCATE

只删部分数据(有WHERE)

DELETE

需要触发器执行额外逻辑

DELETE

保持自增ID不变

DELETE

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PawSQL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🔥 各大数据库差异小科普
  • 🏎️ TRUNCATE为什么这么快?
  • ⚡ 小心使用TRUNCATE的几大坑!
  • 🎯 清空表正确姿势总结
  • 🎯 PawSQL的提示预警
  • 当PawSQL检测到没有条件或是条件恒真的删除操作时,会提示用户将其重写为TRUNCATE语句。
  • 🌟 本文小彩蛋:一图看懂
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档