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

delete,drop,truncate的区别

  1. delete操作

    • 功能delete是用于从表中删除数据行的操作。它是一种数据操作语言(DML)语句,允许你根据指定的条件删除表中的部分或全部数据。例如,如果你想从一个名为employees的表中删除所有年龄大于 60 岁的员工记录,可以使用以下 SQL 语句:
      • DELETE FROM employees WHERE age > 60;
    • 对事务的支持delete操作通常是在事务的环境下执行的,这意味着它可以被回滚(rollback)。如果在一个事务中执行了delete操作,并且在事务提交(commit)之前发生了错误或者需要撤销操作,就可以使用回滚操作来恢复被删除的数据。例如,在一个存储过程中,先执行delete操作,然后在后续的代码中发现条件有误,就可以回滚整个事务来恢复数据。
    • 对存储空间的影响:当使用delete删除数据行时,被删除的数据所占用的存储空间不会立即释放。数据库管理系统(DBMS)会在内部标记这些被删除的行,这些行所占用的空间可能会在后续的操作(如插入新数据、数据库优化操作等)中被重新利用。例如,在一个频繁插入和删除数据的表中,使用delete操作后,表的存储空间大小可能不会立即减小,直到执行了数据库的空间整理操作。
  2. drop操作

    • 功能drop主要用于删除数据库对象,如删除表、视图、索引、存储过程等。当你使用drop table语句时,会将整个表及其所有数据、索引、约束等全部删除。例如,要删除名为customers的表,可以使用以下语句:
      • DROP TABLE customers;
    • 对事务的支持drop操作通常是立即生效的,并且在大多数数据库系统中,drop操作一旦执行,就无法直接回滚。它是一种数据定义语言(DDL)语句,与数据库的结构定义相关,不像delete那样在事务的控制范围内。例如,如果你不小心执行了drop table语句,想要恢复数据会非常困难,需要依赖数据库备份等手段。
    • 对存储空间的影响drop操作会立即释放被删除对象所占用的存储空间。当删除一个表时,表所占用的磁盘空间会被数据库系统标记为可重新分配,这些空间可以被其他数据库对象使用。例如,在磁盘空间紧张的情况下,删除一些不再需要的大型表可以快速释放存储空间。
  3. truncate操作

    • 功能truncate用于快速删除表中的所有数据,但保留表的结构(如列定义、索引定义、约束等)。它类似于delete语句不带WHERE条件的情况,但在实现方式和性能上有所不同。例如,对于一个名为orders的表,可以使用以下语句来清空所有数据:
      • TRUNCATE TABLE orders;
    • 对事务的支持truncate操作在某些数据库系统中可能不受事务控制或者是自动提交的,这意味着它可能无法像delete那样方便地进行回滚。不过不同的数据库对truncate的事务处理方式可能不同。例如,在 Oracle 数据库中,truncate操作是自动提交的,不能直接回滚;而在 SQL Server 中,在某些情况下可以在事务范围内对truncate操作进行一定程度的控制。
    • 对存储空间的影响:与delete不同,truncate操作通常会立即释放表中数据所占用的存储空间。它会重置表的存储结构,使得表的数据空间被清空,就好像重新创建了一个只有结构没有数据的表一样。例如,在一个需要频繁清空和重新加载数据的表中,使用truncate操作可以更高效地利用存储空间。

http://www.kler.cn/a/457671.html

相关文章:

  • 【C++】: std::tie 用法详解
  • 人工智能:变革时代的核心驱动力
  • docker compose部署kafka集群
  • C语言优化技巧--达夫设备(Duff‘s Device)解析
  • linux--编译驱动模块【虚拟网卡 tun】
  • 3D数学基础2
  • ChatGPT与Postman协作完成接口测试(四)
  • sql注入杂谈(一)--union select
  • Mysql(MGR)和ProxySQL搭建部署-Kubernetes版本
  • 【机器学习篇】穿越数字迷雾:机器深度学习的智慧领航
  • 【Hackthebox 中英 Write-Up】Manipulating a CRUD API | 操控 CRUD API:一步步提取 Flag
  • 一个线程中总共3个串行任务,在另一个线程中展示任务进行的实施进度。
  • XXL-TOOL v1.3.2 发布 | Java工具类库
  • 【10】Selenium+Python UI自动化测试 邮件发送测试报告(某积载系统实例-04)
  • Mac 安装Mysql启动Mysql以及数据库的常规操作
  • Python 中常见的一些画图形式
  • driftingblues6_vh靶机
  • 开源 AI 智能名片商城小程序:个人 IP 运营赋能商业腾飞
  • 计算机网络:TCP/IP网络协议
  • 【代码随想录|完全背包问题】
  • interceptor 和异常全局处理 Advice Advice中没有捕获异常
  • 【Linux】:Linux网络编程基础
  • 【学生管理系统】权限管理之角色管理
  • js的讲解
  • JSON结构快捷转XML结构API集成指南
  • 分布式版本管理工具——Git关联远程仓库(github+gitee)