当前位置: 首页 > news >正文

SQL三剑客:DELETE、TRUNCATE、DROP全解析

在 SQL 编程中,DROPDELETETRUNCATE 都是数据操作命令,但它们的功能和行为有本质区别:


1. DELETE

  • 作用:删除表中 满足条件的行(可指定 WHERE 子句)
  • 性质:数据操作语言(DML)
  • 事务
    • 记录日志(每删除一行都记日志)
    • 支持事务回滚(ROLLBACK
  • 锁机制:行级锁(锁定被删除的行)
  • 自增列不重置自增计数器(如 IDENTITYAUTO_INCREMENT
  • 性能:删除大量数据时较慢(逐行操作)
  • 语法示例
    DELETE FROM table_name WHERE condition;  -- 删除特定行
    DELETE FROM table_name;                   -- 删除所有行(保留表结构)
    

2. TRUNCATE

  • 作用快速清空整个表的所有数据
  • 性质:数据定义语言(DDL)
  • 事务
    • 最小化日志(只记录页释放,不记每行)
    • 多数数据库不可回滚(但 SQL Server 等支持事务内回滚)
  • 锁机制:表级锁(锁定整个表)
  • 自增列重置自增计数器(从初始值开始)
  • 性能:极快(直接释放数据页,不扫描行)
  • 限制
    • 不能带 WHERE 子句
    • 有外键引用时可能失败
  • 语法示例
    TRUNCATE TABLE table_name;
    

3. DROP

  • 作用永久删除整个表(结构 + 数据 + 权限 + 索引)
  • 性质:数据定义语言(DDL)
  • 事务
    • 操作立即生效(隐式提交事务)
    • 不可回滚
  • 锁机制:表级锁
  • 结果:表从数据库中完全消失(需重建才能使用)
  • 性能:快(直接删除元数据和数据页)
  • 语法示例
    DROP TABLE table_name;
    

核心区别总结

特性DELETETRUNCATEDROP
删除对象行数据所有行数据表结构 + 数据
是否保留表结构
WHERE 条件支持不支持不支持
日志记录详细(每行)少量(页释放)少量(元数据)
事务回滚支持多数不支持不支持
自增列重置表已不存在
执行速度慢(逐行)快(直接释放数据页)最快(删除元数据)
触发触发器是(触发 DELETE 触发器)否(通常不触发)

使用场景建议

  1. 删除特定行DELETE + WHERE
    DELETE FROM orders WHERE status = 'cancelled';
    
  2. 快速清空大表TRUNCATE
    TRUNCATE TABLE temp_logs;  -- 清空日志表
    
  3. 彻底删除表(包括结构) → DROP
    DROP TABLE obsolete_data;  -- 删除无用表
    

注意事项

  • 外键约束
    TRUNCATEDROP 可能因外键引用失败,需先处理约束。
  • 权限要求
    • DELETE 需要 DELETE 权限
    • TRUNCATE 通常需要 ALTER 权限
    • DROP 需要 DROP 权限
  • 恢复难度
    DROP 操作后数据最难恢复(需从备份还原),DELETE 可通过事务日志恢复。
http://www.dtcms.com/a/325004.html

相关文章:

  • 深度相机---双目深度相机
  • 浏览器CEFSharp+X86+win7 之 浏览器右键菜单(六)
  • Mysql笔记-存储过程与存储函数
  • vulnhub-doubletrouble靶场攻略
  • Linux C文件操作函数
  • 谷歌DeepMind发布Genie 3:通用型世界模型,可生成前所未有多样化的交互式虚拟环境
  • C++移动语义、完美转发及编译器优化零拷贝
  • PostgreSQL 批量COPY导入优化参数配置
  • 近红外与可见光图像融合的多种方法实现
  • OpenAI正式发布GPT-5:迈向AGI的关键一步
  • Java基础-多线程
  • lesson34:深入理解Python线程:从基础到实战优化
  • hysAnalyser --- 支持文件转播UDP/RTP实时流功能
  • CompletableFuture实现Excel 多个sheet页批量导出
  • 【数据分析】循环移位岭回归分析:光遗传学冻结行为模式研究
  • 【PyTorch】单目标检测项目部署
  • MPLS的基本工作原理
  • AI玩具新浪潮:百亿资本涌入,情感计算重塑陪伴经济
  • WAIC2025逛展分享·AI鉴伪技术洞察“看不见”的伪造痕迹
  • JAVA中关于Stream流的使用
  • 虚拟主机示例
  • vuhub drippingblues靶场攻略
  • Windows环境下私有化部署Dify,并接入通义千问模型
  • UNet改进(31):基于Adaptive Attention的UNet设计与实践
  • 基于Spring SSE构建实时监控系统
  • Python 的列表 list 和元组 tuple 有啥本质区别?啥时候用谁更合适?
  • TC39x STM(System Timer)学习记录
  • 压力测试等工具源码包编译及使用方法
  • Vulnhub doubletrouble 靶场复现 详细攻略
  • Knuth‘s TwoSum Algorithm 原理详解