首页 > 数据库 >在SQL编程中DROP、DELETE和TRUNCATE的区别

在SQL编程中DROP、DELETE和TRUNCATE的区别

时间:2024-07-28 13:24:49浏览次数:17  
标签:事务 TRUNCATE 删除 DROP SQL 日志 DELETE

在SQL编程中,DROPDELETETRUNCATE都是用于删除数据的命令,但它们之间有着显著的区别,主要体现在它们删除数据的范围、操作的不可逆性、对表结构的影响、性能以及事务日志的影响上。

  1. DROP:
    • 作用DROP命令用于删除整个表及其所有的数据、索引、触发器、约束等。简而言之,它会从数据库中彻底移除表。
    • 不可逆性DROP操作是不可逆的,一旦执行,所有数据和表结构都将丢失,除非有备份。
    • 对表结构的影响:删除表结构本身。
    • 事务日志影响:因为DROP操作涉及删除表结构,所以它会生成大量的事务日志,尤其是在大型表上。
  2. DELETE:
    • 作用DELETE命令用于删除表中的行(记录)。你可以通过WHERE子句来指定要删除哪些行,如果不使用WHERE子句,则会删除表中的所有行。
    • 不可逆性:如果表上有事务控制(如使用BEGIN TRANSACTION),则DELETE操作可以通过ROLLBACK来撤销。但如果没有事务控制或已提交事务,则DELETE操作也是不可逆的。
    • 对表结构的影响:不影响表结构,只删除数据。
    • 性能DELETE操作可以逐行删除数据,这可能导致性能问题,尤其是在大型表上。此外,它还会触发删除触发器(如果存在)。
    • 事务日志影响DELETE操作会针对每一行生成详细的事务日志,这可能会导致事务日志迅速增长。
  3. TRUNCATE:
    • 作用TRUNCATE命令用于删除表中的所有行,但不删除表本身。它不会逐行删除数据,而是快速删除数据页。
    • 不可逆性TRUNCATE操作在大多数数据库系统中是不可逆的,因为它不记录每行数据的删除操作,而是直接删除数据页。
    • 对表结构的影响:不影响表结构,只删除数据。
    • 性能TRUNCATE通常比DELETE要快得多,因为它不逐行删除数据,也不触发删除触发器。
    • 事务日志影响TRUNCATE操作生成的事务日志比DELETE少得多,因为它只记录表的数据页被删除的事实,而不是每行数据的删除。

总结:

  • 使用DROP时要非常小心,因为它会删除整个表及其所有内容。
  • DELETE提供了更灵活的数据删除选项,但可能更慢,并会生成更多的事务日志。
  • TRUNCATE是删除表中所有行的最快方法,但它在操作上是不可逆的,并且不触发触发器。

标签:事务,TRUNCATE,删除,DROP,SQL,日志,DELETE
From: https://blog.csdn.net/sheji888/article/details/140749717

相关文章

  • Mysql安装教程【实测有效】
     一、查找并卸载原有的mysql数据库1.使用rpm-qa|grepmysql命令查找mysql数据库软件包及依赖包;若没有任何显示则证明没有相关的mysql数据库;若显示了相关的软件包及依赖包,使用 yumremovexxx命令依次删除显示的包;注意:xxx为显示的软件包及依赖包包名;2.使用 find/......
  • ORACLE PL/SQL 对象、表数据对比功能存储过程简单实现
    最近帮忙跟进个oracle11gupgrade升级到19c的项目,由于业主方不太熟悉oracleupgrade相关升级流程,以及升级影响范围相关的事项,担心应用停机升级以后会导致数据库保存的业务数据不一致。......
  • mysql 关于幻读
    前言什么是幻读?幻读这个概念产生是因为事物隔离级别可重复读需要解决的一个问题。可重复读,顾名思义,就是一个事物中多次读取的结果是一致的。那其中就包含两个需要解决的问题:虚读:对同一行数据,每次读取的不一致。具体表现为T1读取某一数据后,当T2进行了修改,然后T1再次读该数......
  • Jforum项目踩坑,安装过程SQL异常
    背景:已安装jdk,mysql,tomcat,并将jforum(2.1.9)放到tomcat,输入http://localhost:8081/jforum/install.jsp,进行安装,但是安装失败了.遇到了问题基本和数据库有关系:1. java.sql.SQLExceptionMESSAGE:Unknowncharactersetindexforfield'255'receivedfromserver. 》......
  • SQL多表查询-JOIN的用法
    假设有两张表:学生表students和课程表courses,现在要查询学生名和课程名。--students表+----+---------+-----------+|id|name|course_id|+----+---------+-----------+|1|Alice|1||2|Bob|2||3|Charlie|NULL|+......
  • Windows版MySQL8.4.2LTS解压直用(下载免安装-绿色-项目打包直接使用-含卸载)
    文章目录下载地址选择GPL选择server选择8.5.2LTS长期服务版配置解压配置环境变量初始化新建my.ini配置root密码安装mysql启动mysql服务使用mysql登陆mysql修改mysql密码设置客户端可连接远程MySQL服务器修改host为值为”%“执行语句:updateusersethost='%'where......
  • 【SQL 新手教程 3/20】关系模型 -- 外键
    ......
  • 从 jupyter 笔记本连接到容器化 postgresql
    我有一个运行postgresql的容器,我想摄取一些我在ETL脚本中准备好的数据。我已经创建了数据库,但是,当我尝试通过jupyter笔记本连接本地计算机时,它一直说找不到主机,即使我在.yaml文件中设置了它。我的.yaml文件是这样的:version:'3.7'services:postgres:image:......
  • (免费领源码)java#ssm#mysql航空机票管理系统27545-计算机毕业设计项目选题推荐
    摘 要随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的航空机票管理系统,机票系统的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本航空机票管理系统是针对目前航空机票管理系统的实际需求,从实际工作出发,对......
  • 基于python+flask+mysql徐州市天气信息可视化分析系统04600-计算机毕业设计项目选题推
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对天气信息等问题,对天气信息进行研究分析,然后开发设计出天气信息可视化分析系统以解决问题。......