数据库笔记(一):delete、truncate和drop

一.delete

1.删除整张表的数据:

delete from table_name;

2.删除部分数据,添加where子句:

delete  from table_name where...;

3.说明

delete可以和where子句连用删除指定行。
属于DML语言,每次删除一行,都在事务日志中为所删除的每行记录一项。产生rollback,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发,如果删除大数据量的表速度会很慢。
删除表中数据而不删除表的结构(定义),同时也不释放空间。
delete不会删除索引 (新插入的数据将在删除数据的索引后继续增加);

二.truncate

1.只能操作表,将表中数据全部删除,在功能上和不带where子句的delete语句相同:

truncate table table_name;

2.说明

默认情况下,truncate通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。所以使用的系统和事务日志资源少,可以使用reuse storage; truncate会将高水线复位(回到最开始).
truncate是DDL语言, 操作立即生效,自动提交,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
删除内容、释放空间但不删除表的结构(定义)。

三.drop

1.drop语句将删除表的结构,以及被依赖的约束(constrain),触发器(trigger),索引(index);

drop table table_name;

2.说明

删除之后,依赖于该表的存储过程/函数将保留,但是变为invalid状态.
drop也属于DDL语言,立即执行,执行速度最快
删除内容和定义,释放空间。

delete语句:delete语句用于从表中删除特定的行或符合特定条件的行。delete语句是一种有条件的删除操作,它可以通过WHERE子句指定特定的条件来选择要删除的行。delete语句只能删除数据行,而不会删除表本身或其他对象。删除操作通常可以回滚,也就是能够撤回删除操作并恢复被删除的数据。
truncate语句:truncate语句用于从表中删除所有的行,但保留表的结构。相比于delete,truncate是一种非常快速、高效的操作,因为它不需要逐行删除数据,而是直接将表中的数据页清空。truncate操作不会触发事务日志,无法回滚。因此,一旦执行truncate操作,被删除的数据将无法恢复。
drop语句:drop语句用于删除数据库中的对象,包括表、视图、索引等。drop语句是一种物理删除,它会完全删除指定的对象以及与该对象相关的所有数据和定义。drop操作是不可恢复的,因此在执行drop操作之前需要特别小心,以防止误操作导致数据丢失。

delete删除内容,不删除表结构,可以删除全部数据,也可以删除部分数据,一行行删除,效率较低,可以回滚。
truncate删除内容,不删除表结构,删除表全部数据,操作生效后,自动提交,不能回滚。
drop既删除表内容,又删除表结构,执行速度最快。
已经确定删除整张表和数据,也不需要恢复数据了,用 drop;
删除数据不删除表,但是删除之后还有可能会后悔,用 delete;
只想删除数据,不用删除表,删除数据后不会后悔了,用 truncate;
表和索引所占空间:
当表被truncate后,这个表和索引所占用的空间会恢复到初始大小;
delete操作不会减少表或索引所占用的空间;
drop语句将表所占用的空间全释放掉。

delete 语句可以使用where子句实现部分删除,而truncate不可以,会将表中的整个数据全部删除,使用时,可以按需求选择;
如果想从表中删除所有的数据,不要使用delete,可以使用truncate语句,因为这样执行速度更快。truncate语句实际是删除原来的表然后重新建立一个新表;
在没有备份情况下,谨慎使用 drop 与 truncate。要删除表结构使用drop;.对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变;使用truncate删除之后,种子会恢复到初始值。

原文链接

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode344. Reverse String

Write a function that reverses a string. The input string is given as an array of characters s. You must do this by modifying the input array in-place with O(1) extra memory. Example 1: Input: s [“h”,“e”,“l”,“l”,“o”] Output: [“o”,“l”,“l”…

郎酒不做酱香“凤尾”,白酒首富汪俊林要做兼香“鸡头”

前两天,《2024胡润百富榜》发布,郎酒集团董事长汪俊林以590亿元财富位列榜单第65位,虽仍是白酒行业首富,但排名较去年下降18位,财富缩水17%。 个人财富的缩水,或许和身后郎酒的困境息息相关。发展40年来&am…

【力扣】[Java版] 刷题笔记-104. 二叉树的最大深度

题目:104. 二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 解题思路 有关二叉树的题,最先想到的就是利用递归方法遍历。 解题过程 分别计算左右子树的最大…

HCIP-HarmonyOS Application Developer 习题(十七)

(判断)1、对于用户创建的一些临时卡片在遇到卡片服务框架死亡重启,此时临时卡片数据在卡片管理服务中已经删除,且对应的卡片ID不会通知到提供方,所以卡片使用方需要自己负责清理长时间未刚除的临时卡片数据。 答案&…

2024下半年软考全国计算机软考高级考试,带你一文读懂软考!

一、软考是什么? 全国计算机技术与软件专业技术资格(水平)考试,简称“软考”,分为初级、中级、高级三个级别,国家级考试,证书含金量很高。 作为IT人,有哪些科目可以报考? 可参考202…

Vue3 学习笔记(十三)Vue组件详解

1、组件(Component) 介绍 组件(Component)是 Vue.js 最强大的功能之一。 组件可以扩展 HTML 元素,封装可重用的代码,可以帮助你将用户界面拆分成独立和可复用的部分。 每个 Vue 组件都是一个独立的 Vue 实…

快速入门kotlin编程(精简但全面版)

注:本文章为个人学习记录,如有错误,欢迎留言指正。 目录 1. 变量 1.1 变量声明 1.2 数据类型 2. 函数 3. 判断语句 3.1 if 3.2 when语句 4. 循环语句 4.1 while 4.2 for-in 5. 类和对象 5.1 类的创建和对象的初始化 5.2 继承 5…

性能之光 年度电竞性能旗舰iQOO 13发布

2024年10月30日,被定义为“性能之光”的年度电竞性能旗舰——iQOO 13正式发布,售价3999元起。iQOO 13作为iQOO 品牌在性能上的又一次深入探索,它像是一束光,引领行业不断拉高性能上限,让用户看到更多的可能性。 iQOO …

ubuntu内核更新导致显卡驱动掉的解决办法

方法1,DKMS指定内核版本 用第一个就行 1,借鉴别人博客解决方法 2,借鉴别人博客解决方法 方法2,删除多于内核的方法 系统版本:ubuntu20.24 这个方法是下下策,如果重装驱动还是不行,就删内核在…

端到端拥塞控制的公平性和稳定性

昨天早上环城河跑步时的两个思考,发了朋友圈,简单总结成文。 拥塞控制算法公平性度量要重新评估!仅以带宽公平性做论断是过时且自私的,在全局视角,平衡和稳定一定以某种表现为乘积 “矩” 来保证,比如力矩…

Vue 组件生命周期(四)

Vue 组件生命周期 Vue3 的组件生命周期可以概括为四个阶段:创建、挂载、更新、销毁。每个阶段都包含了一组钩子函数,用于在不同阶段执行特定的操作。 生命周期各阶段对应以下 Hooks 函数: 一、创建阶段 setup() Vue3 引入的新生命周期函数&am…

idea main 不是模块 导致找不到或无法加载主类

问题 导入一个新项目,然后执行启动类,直接报错: 找不到或无法加载主类。 把编译的删除了,重新处理,也不行。 看了下main和test不是模块 正常的是: 处理: 把项目的 .gradle 和 .idae 目录删了&am…

推荐一款优秀的pdf编辑器:Ashampoo PDF Pro

Ashampoo PDF Pro是管理和编辑 PDF 文档的完整解决方案。程序拥有您创建、转换、编辑和保护文档所需的一切功能。根据需要可以创建特定大小的文档,跨设备可读,还可以保护文件。现在您还能像编辑Word文档一样编辑PDF! 软件特点 轻松处理文字 如 Microso…

在manjaro 2024里使用yay命令安装ROS2

不建议这么安装,研究了两天以失败告终。要不就手动编译吧。。。(在系统环境良好的情况下,最好是刚装完系统就装ROS)真的太多不适配了,旧有的很多yay包都会遇到一些奇怪的问题: 0.一开始就会遇到网络卡住的…

平台化运营公司如何在创业市场招商

在当今商业环境中,平台化运营的公司正成为推动经济发展的重要力量。对于这类公司而言,在创业市场招商意义重大。 平台化运营公司具有独特特点:通过搭建开放共享平台连接供需双方,实现资源优化配置与价值创造。比如电子商务平台、社…

mybatis数据映射(记录踩坑点)

刚开始,userInfo里面的id我默认以为是User表的id,但是后面稍微看了一下返回的数据,userId跟replyId一致,我就知道userInfo里的id指的是Reply的id(应该是命名冲突,先查Reply有没有id,没有&#x…

OpenCV基本操作(python开发)——(7)实现图像校正

OpenCV基本操作(python开发)——(1) 读取图像、保存图像 OpenCV基本操作(python开发)——(2)图像色彩操作 OpenCV基本操作(python开发)——(3&…

【工具使用】VSCode如何将本地项目关联到远程的仓库 (vscode本地新项目与远程仓库建立链接)

在日常练习的项目中,我每次都在vscdoe编写前台代码,但是对于编写的代码,如何将本地项目关联到远程的仓库;这里做一下记录 文章目录 1、Gitee 新建远程仓库2、将本地的项目和远程仓库进行关联**3、将本地修改的代码推送到远程通过命…

语言≠思维,大模型学不了推理:一篇Nature让AI社区炸锅了

转自:机器之心 大语言模型(LLM)为什么空间智能不足,GPT-4 为什么用语言以外的数据训练,就能变得更聪明?现在这些问题有 「标准答案」了。 近日,一篇麻省理工学院(MIT)等…

技术星河中的璀璨灯塔 —— 青云交的非凡成长之路

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…