高级java每日一道面试题-2025年01月20日-数据库篇-简单说-说drop、delete与truncate的区别?

news2025/1/22 13:35:12

如果有遗漏,评论区告诉我进行补充

面试官: 简单说-说drop、delete与truncate的区别?

我回答:

简单说明

  • DROP

    • 用途:用于删除整个表或数据库。
    • 结果:删除表时,会同时删除表的结构和数据。
    • 恢复:无法恢复被删除的数据(除非有备份)。
  • DELETE

    • 用途:用于删除表中的行(记录),表结构保持不变。
    • 条件性:可以使用 WHERE 子句来指定要删除的行。
    • 回滚:删除操作可以回滚(如果事务未提交)。
  • TRUNCATE

    • 用途:用于快速删除表中的所有行,但保留表结构。
    • 性能:通常比 DELETE 更快,因为它不记录每一行的删除操作。
    • 回滚:在大多数数据库系统中,TRUNCATE 操作不能回滚。

详解

DROP
  • 语法

    DROP TABLE table_name;
    DROP DATABASE database_name;
    
  • 作用

    • 彻底删除表或数据库,包括其结构和数据。
  • 事务

    • DROP 操作通常是不可回滚的。
  • 性能

    • 非常快,因为它直接删除表或数据库对象,不需要逐行删除数据。
  • 用途

    • 当你确定不再需要该表或数据库时使用。
DELETE
  • 语法

    DELETE FROM table_name WHERE condition;
    
  • 作用

    • 删除满足 WHERE 条件的行。如果没有 WHERE 子句,则删除所有行。
  • 事务

    • DELETE 操作可以回滚,前提是在事务中执行且事务未提交。
  • 性能

    • 相对较慢,特别是当表中有很多行时,因为它需要逐行删除数据并记录每个删除操作。
  • 触发器

    • 可以触发与 DELETE 操作相关的触发器。
  • 用途

    • 当你需要删除特定行或满足特定条件的行时使用。
TRUNCATE
  • 语法

    TRUNCATE TABLE table_name;
    
  • 作用

    • 快速删除表中的所有行,但保留表结构。
  • 事务

    • 在大多数数据库系统中,TRUNCATE 操作不能回滚(但具体行为可能因数据库而异)。
  • 性能

    • 通常比 DELETE 更快,因为它不记录每行的删除操作,只是重置表的数据页。
  • 自动提交

    • 在许多数据库系统中,TRUNCATE 操作会自动提交,这意味着它不能被回滚。
  • 重置自增列

    • TRUNCATE 通常会重置表中自增列(如 AUTO_INCREMENT)的计数器。
  • 限制

    • 不能用于有外键依赖的表。
  • 用途

    • 当你需要快速清空表中的所有行时使用,但要注意它的不可回滚性和对外键约束的影响。

总结

  • 使用 DROP 来删除整个表或数据库。
  • 使用 DELETE 来删除特定行,可以回滚,并且可以触发触发器。
  • 使用 TRUNCATE 来快速清空表中的所有行,但通常不能回滚,且不能用于有外键依赖的表。

理解这些区别对于优化数据库操作和避免数据丢失至关重要。在面试中,能够清晰地解释这些概念并举例说明其应用场景,将大大增加你的竞争力。此外,了解不同命令背后的机制有助于编写更高效、更安全的SQL代码。例如,在大批量删除数据时选择 TRUNCATE 而不是 DELETE 可以显著提高性能;而在需要有条件地删除数据时,则应选择 DELETE

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

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

相关文章

从结构嵌套的幻梦里:递归与数据构建的精巧和鸣

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 这一节我们来学习递归的相关知识 函数递归 一、什么是递归1.1 递归的思想 二、递归的限制条件三、递归的…

【Linux系统】—— 编译器 gcc/g++ 的使用

【Linux系统】—— 编译器 gcc/g 的使用 1 用 gcc 直接编译2 翻译环境2.1 预处理(进行宏替换)2.2 编译(生成汇编)2.3 汇编(生成机器可识别代码)2.4 链接2.5 记忆小技巧2.6 编译方式2.7 几个问题2.7.1 如何理…

【Unity3D】3D物体摆放、场景优化案例Demo

目录 PlaceManager.cs(放置管理类) Ground.cs(地板类) 和 GroundData.cs(地板数据类) 额外知识点说明 1、MeshFilter和MeshRenderer的Bounds区别 2、Gizmos 绘制一个平行于斜面的立方体 通过网盘分享的文件:PlaceGameDemo2.unitypackage 链接: https://pan.baid…

智能系统的感知和决策

智能系统在感知和决策过程中具备的关键能力表现在智能感知/自主判定上,下面可以从感知的本质、自主判断的含义及其在智能系统中的作用进行深入分析。 1、智能感知:信息获取与理解 智能感知是指智能系统通过传感器或其他数据采集手段获取环境中的信息&…

Spring 中的事件驱动模型

事件驱动的基本了解 事件模式也就是观察者模式,当一个对象改变的时候,所有依赖的对象都会收到一个通知。 Subject:抽象主题 Observer:具体主题 Concrete Subject:抽象观察者,在得到更新通知之后去更新自…

linux-FTP服务配置与应用

也许你对FTP不陌生,但是你是否了解FTP到底是个什么玩意? FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为 “文传协议” 用于Internet上的控制文件的双向传输。同时,它也是一个应用程序…

linux-NFS网络共享存储服务配置

1.NFS服务原理 NFS会经常用到,用于在网络上共享存储,这样讲,你对NFS可能不太了解,举一个例子, 加入有三台机器A,B,C,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些 图…

Jenkins 启动

废话 这一阵子感觉空虚,心里空捞捞的,总想找点事情做,即使这是一件微小的事情,空余时间除了骑车、打球,偶尔朋友聚会 … 还能干什么呢? 当独自一人时,究竟可以做点什么,填补这空虚…

消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)

Apache Pulusar是一个分布式、多租户、高性能的发布/订阅(Pub/Sub)消息系统,最初由Yahoo开发并开源。它结合了Kafka和传统消息队列的优点,提供高吞吐量、低延迟、强一致性和可扩展的消息传递能力,适用于大规模分布式系…

Python配置MITMPROXY中间人监听配置

1、安装python 环境,此处可以使用conda安装:conda create --name my_new_env python3.12 2、pip安装mitmproxy:pip install mitmproxy,安装后如果使用mitmproxy --version 成功返回结果,说明已经在环境变量路径中,如果…

Java-数据结构-二叉树习题(2)

第一题、平衡二叉树 ① 暴力求解法 📚 思路提示: 该题要求我们判断给定的二叉树是否为"平衡二叉树"。 平衡二叉树指:该树所有节点的左右子树的高度相差不超过 1。 也就是说需要我们会求二叉树的高,并且要对节点内所…

【网络原理】万字详解 HTTP 协议

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. HTTP 前置知识1.1 HTTP 是什么1.2 HTPP 协议应用场景1.3 HTTP 协议工作过程 2. HTTP 协议格式2.1 fiddler…

基于STM32的智能寝室控制系统设计(论文+源码)

1 .系统整体设计 通过需求分析,本设计基于STM32的智能寝室控制系统整体架构如图2.1所示,整系统利用DHT11温湿度传感器获取室内环境数据,并通过OLED显示,提供用户实时信息,火焰传感器和烟雾传感器用于监测火灾情况&…

日历热力图,月度数据可视化图表(日活跃图、格子图)vue组件

日历热力图,月度数据可视化图表,vue组件 先看效果👇 在线体验https://www.guetzjb.cn/calanderViewGraph/ 日历图简单划分为近一年时间,开始时间是 上一年的今天,例如2024/01/01 —— 2025/01/01,跨度刚…

铁电存储器FM25CL64B简介及其驱动编写(基于STM32 hal库)

铁电存储器FM25CL64B简介及其驱动编写(基于STM32 hal库) 文章目录 铁电存储器FM25CL64B简介及其驱动编写(基于STM32 hal库)前言一、FM25CL64B简介二、驱动代码1.头文件2.c文件 总结 前言 FM25CL64B是赛普拉斯cypress出品的一款铁…

基于微信小程序的科创微应用平台设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

HarmonyOS Next 最强AI智能辅助编程工具 CodeGenie介绍

随着大模型的兴起,在智能编码领域首先获得了应用。 市面上从Microsoft Copilot到国内阿里通义,字节marscode等,都提供了copilot方式的智能编码工具。HarmonyOS Next作为诞生一年的新事物,由于代码量和文档迭代原因,在智…

WPF2-1在xaml为对象的属性赋值.md

1. AttributeValue方式 1.1. 简单属性赋值1.2. 对象属性赋值 2. 属性标签的方式给属性赋值3. 标签扩展 (Markup Extensions) 3.1. StaticResource3.2. Binding 3.2.1. 普通 Binding3.2.2. ElementName Binding3.2.3. RelativeSource Binding3.2.4. StaticResource Binding (带参…

Appium(四)

一、app页面元素定位 1、通过id定位元素: resrouce-id2、通过ClassName定位:classname3、通过AccessibilityId定位:content-desc4、通过AndroidUiAutomator定位5、通过xpath定位xpath、id、class、accessibility id、android uiautomatorUI AutomatorUI自…

Windows图形界面(GUI)-QT-C/C++ - Qt List Widget详解与应用

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 QListWidget概述 使用场景 常见样式 QListWidget属性设置 显示方式 (Display) 交互行为 (Interaction) 高级功能 (Advanced) QListWidget常见操作 内容处理 增加项目 删除项目…