mysql-DELETE、DROP 和 TRUNCATE区别

news2025/3/28 17:13:01

在MySQL中,DELETEDROPTRUNCATE 是用于不同目的的SQL命令,它们各自执行不同的数据库操作。以下是它们的区别和适用场景:

DELETE

  • 用途:用于从表中删除满足特定条件的行。
  • 语法示例
    DELETE FROM table_name WHERE condition;
    
  • 特点
    • 可以带有WHERE子句来指定要删除哪些行,如果不带WHERE子句,则会删除表中的所有行。
    • 删除操作可以被回滚(如果事务支持)。
    • 删除后,表结构依然存在。
    • 对于大表,DELETE可能会比较慢,因为它是一行一行地删除数据,并且会对每行生成日志记录以便支持回滚。

DROP

  • 用途:用于删除整个数据库对象,如表、视图、索引等。
  • 语法示例
    DROP TABLE table_name;
    
  • 特点
    • 完全移除数据库对象及其定义,不仅仅是数据。
    • 一旦执行,除非有备份或事务支持,否则无法恢复被删除的对象。
    • 不仅删除数据,还会删除与该对象相关的所有元数据(如索引、约束等)。
    • 操作不可回滚。

TRUNCATE

  • 用途:用于快速删除表中的所有数据,但保留表结构。
  • 语法示例
    TRUNCATE TABLE table_name;
    
  • 特点
    • 快速删除表中的所有数据,比DELETE不带WHERE子句更快,因为它不会逐行删除数据,而是直接释放存储空间。
    • 不支持条件删除(即不能用WHERE子句指定要删除的数据)。
    • 操作通常不能回滚(取决于存储引擎),并且不会触发触发器。
    • 相比DELETETRUNCATE消耗的日志资源更少,因为它不需要记录每一行的删除操作。

总结对比

特性/命令DELETEDROPTRUNCATE
作用范围删除符合条件的行删除整个数据库对象(如表)删除表中的所有数据但保留表结构
是否影响表结构
能否使用WHERE条件
性能较慢,特别是对于大表非常快
可否回滚如果事务支持则可以不可以大多数情况下不可以
日志记录记录每一行的删除不适用记录较少

使用场景

  • DELETE:当你需要根据某些条件删除表中的部分行时使用。
  • DROP:当你不再需要某个表或其它数据库对象时使用。
  • TRUNCATE:当你想要快速清空一个表的所有数据但保留表结构时使用。

选择合适的命令取决于你具体的需求以及对数据安全性和操作速度的要求。

TRUNCATE 操作用于快速删除表中的所有数据,但保留表的结构(包括列定义、索引、约束等)。执行 TRUNCATE 后,对于该表创建的函数和视图是否仍然可以使用,主要取决于几个因素:

函数
在 MySQL 中,函数通常是指用户定义的函数(UDF)或内置函数。如果你提到的是基于某个表的数据来计算结果的存储函数或触发器内的逻辑,那么这些函数本身的可用性不会因为对表执行 TRUNCATE 而受到影响。但是,如果函数依赖于表中的数据进行计算,那么由于表中已经没有数据了,调用这些函数可能会返回不同的结果或空值。

示例:假设有一个函数计算某个表中某一列的平均值。执行 TRUNCATE 后,由于表中没有数据,再次调用这个函数将会返回 NULL 或者根据具体实现可能抛出错误,除非函数中有相应的处理逻辑。
视图
对于视图而言,它们是基于 SQL 查询的结果集创建的虚拟表。视图可以包含对一个或多个表的查询。如果你对视图所依赖的一个或多个基础表执行了 TRUNCATE 操作,视图本身依然存在且可以被查询,但由于基础表中的数据已被清空,视图查询的结果也将反映这一点——即显示为空或者仅包含那些不依赖于被截断表的数据(如果有)。

示例:如果你有一个视图 v_employee_salaries 是基于 employees 表构建的,并且你执行了 TRUNCATE TABLE employees;,之后当你查询 v_employee_salaries 时,将看不到任何数据,因为 employees 表现在是空的。
关键点总结
视图的可用性:TRUNCATE 不会影响视图的存在性和可访问性,但会影响视图查询的结果,因为视图展示的数据来源于其定义的基础表。
函数的可用性:函数本身不会因 TRUNCATE 而失效,但如果函数依赖于被截断表的数据,则函数的行为可能会改变(例如返回空结果)。
因此,在执行 TRUNCATE 操作之前,请确保了解它对你数据库中其他对象(如视图和依赖于特定表数据的函数)的影响,并做好相应的准备或调整。如果需要保留某些数据以便后续恢复,考虑先备份相关数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

耘想Docker版Linux NAS的安装说明

耘想LinNAS(Linux NAS)可以通过Docker部署,支持x86和arm64两种硬件架构。下面讲解LinNAS的部署过程。 1. 安装Docker CentOS系统:yum install docker –y Ubuntu系统:apt install docker.io –y 2. 下载LinNas镜像…

OpenCV图像拼接(4)图像拼接模块的一个匹配器类cv::detail::BestOf2NearestRangeMatcher

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::detail::BestOf2NearestRangeMatcher 是 OpenCV 库中用于图像拼接模块的一个匹配器类,专门用于寻找两幅图像之间的最佳特征点匹配…

不用 Tomcat?SpringBoot 项目用啥代替?

在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。 同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内存使…

Zabbix安装(保姆级教程)

Zabbix 是一款开源的企业级监控解决方案,能够监控网络的多个参数以及服务器、虚拟机、应用程序、服务、数据库、网站和云的健康状况和完整性。它提供了灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的告警,从而能够快速响应服务器问…

鸿蒙开发真机调试:无线调试和USB调试

前言 在鸿蒙开发的旅程中,真机调试堪称至关重要的环节,其意义不容小觑。虽说模拟器能够为我们提供初步的测试环境,方便我们在开发过程中快速预览应用的基本效果,但它与真机环境相比,仍存在诸多差异。就好比在模拟器中…

工厂函数详解:概念、目的与作用

一、什么是工厂函数? 工厂函数(Factory Function)是一种设计模式,其核心是通过一个函数来 创建并返回对象,而不是直接使用 new 或构造函数实例化对象。它封装了对象的创建过程,使代码更灵活、可维护。 二、…

Python简单爬虫实践案例

学习目标 能够知道Web开发流程 能够掌握FastAPI实现访问多个指定网页 知道通过requests模块爬取图片 知道通过requests模块爬取GDP数据 能够用pyecharts实现饼图 能够知道logging日志的使用 一、基于FastAPI之Web站点开发 1、基于FastAPI搭建Web服务器 # 导入FastAPI模…

基于springboot的房产销售系统(016)

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于房产销售系统当然也不能排除在外,随着网络技术的不断成熟,带动了房产销售系统,它彻底改变了过去传统的…

云盘搭建笔记

报错问题: No input file specified. 伪静态 location / {if (!-e $request_filename) { rewrite ^(.*)$ /index.php/$1 last;break;} } location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php/$1 last; break; } } 设…

《从深海到卫浴:Relax Max如何用军工科技重塑生活仪式》​

《从深海到卫浴:Relax Max如何用军工科技重塑生活仪式》​ 当瑞士联邦理工学院的一纸专利授权书揭开帷幕,卫浴行业终于意识到:Relax Max的「军工科技民用化」绝非营销噱头。这支由前潜艇工程师和航天材料学家组成的团队,将核潜艇…

【vulhub/wordpress靶场】------获取webshell

1.进入靶场环境: 输入:cd / vulhub / wordpress / pwnscriptum 修改版本号: vim docker-compose.yml version: 3 保存退出 开启靶场环境: docker - compose up - d 开启成功,docker ps查看端口 靶场环境80…

人工智能助力家庭机器人:从清洁到陪伴的智能转型

引言:家庭机器人进入智能时代 过去,家庭机器人只是简单的“工具”,主要用于扫地、拖地、擦窗等单一任务。然而,随着人工智能(AI)技术的迅猛发展,家庭机器人正经历从“机械助手”向“智能管家”甚…

【第14节】windows sdk编程:进程与线程介绍

目录 一、进程与线程概述 1.1 进程查看 1.2 何为进程 1.3 进程的创建 1.4 进程创建实例 1.5 线程查看 1.6 何为线程 1.7 线程的创建 1.8 线程函数 1.9 线程实例 二、内核对象 2.1 何为内核对象 2.2 内核对象的公共特点 2.3 内核对象句柄 2.4 内核对象的跨进程访…

STM32U575RIT6单片机(四)

作业: 使用I2C获取SHT20传感器温湿度 使用I2C获取AP3216C三合一传感器: 光照, 接近, 红外 三个功能 合并的传感器 #ifndef SHT20_H #define SHT20_H#include "stdint.h" #include "i2c.h" #include "stdio.h" //1、确定从机的设备地址(代码不…

EMQX安装与配置

EMQX安装与配置 EMQX安装与配置 https://www.emqx.com/zh/downloads-and-install/broker?osUbuntucd /usr/local/srcwget https://www.emqx.com/zh/downloads/broker/4.4.19/emqx-4.4.19-otp24.3.4.2-1-ubuntu16.04-amd64.deb sudo apt install ./emqx-4.4.19-otp24.3.4.2-1…

JVM逃逸分析作用和原理

JVM逃逸分析作用和原理 在JVM的性能优化中,我们通常会关注内存分配、垃圾回收等问题。而逃逸分析(Escape Analysis)是JVM中一种精妙的优化技术,它可以在对象分配时判断该对象是否会在方法或线程之外被访问,从而影响其…

拓展 Coco AI 功能 - 智能检索 Hexo 博客

在之前的文章中,我们成功让 Coco AI 检索 Hugo 博客,这对于博客作者来说是一大福音。然而,从 Hexo 迁移到 Hugo 的成本不容小觑,毕竟大多数开发者对 Node.js 更熟悉,而 Golang 相对陌生。那么,既然 Coco AI…

爬虫基础之爬取猫眼Top100 可视化

网站: TOP100榜 - 猫眼电影 - 一网打尽好电影 本次案例所需用到的模块 requests (发送HTTP请求) pandas(数据处理和分析 保存数据) parsel(解析HTML数据) pyecharts(数据可视化图表) pymysql(连接和操作MySQL数据库) lxml(数据解析模块) 确定爬取的内容: 电影名称 电影主演…

LS-NET-006-思科MDS 9148S 查看内存

LS-NET-006-思科MDS 9148S 查看内存 方法一:使用 show version​ 命令 该命令可显示设备的基本系统信息,包括内存总量。 登录交换机的CLI(通过控制台或SSH连接)。输入命令: show version 在输出中查找类似以下内容…

小程序API —— 54 路由与通信 - 编程式导航

在小程序中实现页面的跳转,有两种方式: 声明式导航:navigator 组件编程式导航:使用小程序提供的 API 编程式导航 API 提供了五个常用的 API 方法: wx.navigateTo():保留当前页面,跳转到应用内…