drop、delete与truncate的区别和语法规则(DDL、DML、事务简述)

目录

1.DROP TABLE

2.DELETE FROM

3.TRUNCATE TABLE

总结

以上为删除表,删除字段(列)语法如下

DDL和DML简述

事务简述

事务四大特性

事务的主要作用

事务的用法



在关系型数据库中,DROPDELETE 和 TRUNCATE 都是用来处理数据的 SQL 语句,但它们的目的和效果有所不同

1.DROP TABLE

DROP TABLE table_name;
  • 作用:
    • 删除整个表结构及其所有数据,包括表的索引、触发器、约束和其他相关对象。
    • 执行 DROP TABLE 后,表从数据库中永久移除,不能再访问该表的数据,也无法回滚此操作。
    • 如果有其他对象依赖于该表,必须先解除依赖,否则可能会导致删除失败。

2.DELETE FROM

DELETE FROM table_name [WHERE condition];
  • 作用
    • 删除表中的某些行或所有行(如果不指定 WHERE 子句,则删除所有行)。
    • DELETE 是 DML(Data Manipulation Language)语句,执行删除时会在事务日志中记录每一行的变化,因此可以通过事务回滚恢复数据。
    • 删除操作可以有条件地进行,可以根据指定的条件来决定哪些行应该被删除。
    • 删除数据后,表结构依然存在,但所占空间不一定立即回收,可通过 VACUUM(在PostgreSQL和SQLite中)或 DBCC SHRINKDATABASE(在SQL Server中)等命令来收缩数据库文件大小。
    • 删除操作会触发任何关联的删除触发器。

3.TRUNCATE TABLE

TRUNCATE TABLE table_name;
  • 作用
    • 清空表中的所有数据,但保留表结构。
    • TRUNCATE 也是 DDL(Data Definition Language)语句,但在某些数据库系统中它被视为一种特殊类型的 DML 语句。
    • 与 DELETE 相比,TRUNCATE 更高效,因为它不记录单行删除操作,而是直接清空表数据,因此速度更快,且不会产生事务日志记录(除非在支持事务的环境中启用了特殊的日志选项)。
    • TRUNCATE 操作不可回滚,也不会触发触发器。
    • 清空表后,表的自增序列(在支持自动增长的列如 Oracle 的 IDENTITY 或 SQL Server 的 IDENTITY 列)会被重置为初始值。
    • 表空间会立即回收,对于大型表的快速清空尤其有用。

总结

  • 需要彻底删除一个表以及与其相关的所有内容时,使用 DROP TABLE
  • 删除表中的一部分数据且希望支持事务回滚和触发器时,使用 DELETE FROM
  • 快速清空一个表的所有数据不关心事务回滚,并且希望尽快释放存储空间且无需触发器干预时,使用 TRUNCATE TABLE
  • drop> truncate >delete

以上为删除表,删除字段(列)语法如下

        在数据库中删除字段(列)的操作通常只涉及到DDL(Data Definition Language)语句中的 ALTER TABLE 语句,而 DROP 和 DELETE 语句并不直接用于删除字段。

ALTER TABLE 表名 DROP COLUMN 字段(列)名;

这条语句会从对应表中永久删除目标字段。删除字段后,该字段及其所有数据将不再可用,而且这个操作不可逆。

DDL和DML简述

DDL:影响表结构

DML:影响表数据

DDL (数据定义语言): DDL 语句主要用于创建、修改和删除数据库的结构元素,如表、视图、索引、存储过程、触发器等。这些语句定义了数据库的逻辑结构,并不直接影响数据本身。DDL 语句的特点是它们通常是隐式提交的,一旦执行就无法回滚。

常见的 DDL 命令包括:

  • CREATE: 创建新的数据库对象,如 CREATE DATABASECREATE TABLECREATE INDEX 等。
  • ALTER: 修改数据库对象的结构,如 ALTER TABLEALTER INDEX 等。
  • DROP: 删除数据库对象,如 DROP TABLEDROP DATABASEDROP INDEX 等。

DML (数据操作语言): DML 语句则是用来查询、插入、更新和删除数据库中的数据。DML 语句作用于数据库的实际内容,允许用户对数据进行各种操作。

常见的 DML 命令包括:

  • SELECT: 查询数据库中的数据。
  • INSERT: 插入新的数据行到表中。
  • UPDATE: 更新表中已存在的数据行。
  • DELETE: 删除表中的数据行。

DML 语句可以在事务内执行,并且默认情况下,只有当事务被明确提交 (COMMIT) 时,所做的更改才会永久保存到数据库中。如果不提交,可以使用 ROLLBACK 命令撤销在事务内的所有更改。而在执行 DDL 语句时,大多数数据库管理系统会自动提交当前事务,即使事务尚未显式提交。这意味着在 DDL 语句执行后,之前的未提交的 DML 变更也会被提交,且 DDL 本身的执行不可回滚。

事务简述

        SQL中的事务(Transaction)是一种机制,用于维护数据库操作的完整性、一致性和可靠性。事务是一个不可分割的工作单元,包含了一系列针对数据库的读写操作。在事务管理下,数据库保证这些操作要么全部成功执行,要么全部不执行,即遵循“原子性”原则。

事务四大特性

  • 原子性(Atomicity):事务是一个原子操作,事务中的所有操作都必须作为一个整体完成,如果其中一个操作失败,那么整个事务就会失败,之前的所有操作都会被撤销,保持数据库处于一致状态。

  • 一致性(Consistency):事务完成后,数据库将处于一致性状态,即事务将数据库从一个有效状态转变为另一个有效状态,遵守所有的业务规则和约束。

  • 隔离性(Isolation):并发执行的事务彼此独立,互不影响。即使多个事务同时进行,每个事务看到的数据都是如同其他事务没有同时进行一样的状态。数据库系统通过锁定机制和事务隔离级别来实现这一特性。

  • 持久性(Durability):一旦事务提交,它对数据库的修改就被永久保存下来,即使出现系统故障也能保证数据不会丢失。

事务的主要作用

  1. 数据完整性保护:确保一系列操作在遇到异常时能够恢复至事务开始前的状态,防止因部分操作成功而导致的数据不一致。

  2. 并发控制:通过事务管理来协调多用户环境下对同一数据的并发访问,避免脏读、不可重复读、幻读等问题。

  3. 业务流程控制:事务可对应复杂的业务逻辑,确保一系列相关操作要么全部完成,要么全部回滚,符合业务预期。

       通过BEGIN TRANSACTION、COMMIT和ROLLBACK等SQL语句,开发者可以手动控制事务的开始、提交和回滚,确保数据库的一致性和可靠性。

事务的用法

  START TRANSACTION; 是SQL语句中用来显式开启一个新的数据库事务的命令。在支持事务的数据库系统中,如MySQL、PostgreSQL等,这个命令非常重要,因为它标志着一系列操作的开始,这些操作将被视为一个不可分割的单元,遵循ACID(原子性、一致性、隔离性、持久性)原则。

        当发出 START TRANSACTION; 命令后,数据库会开始跟踪该事务内的所有更改,直到事务被提交(COMMIT)或回滚(ROLLBACK)。在此期间,事务内的更改对其他事务可能是不可见的,具体取决于所选择的事务隔离级别。

示例:

--开启一个新事务 start transaction
START TRANSACTION;
-- 执行一系列SQL操作,如INSERT、UPDATE、DELETE等
UPDATE accounts SET balance = balance + 100 WHERE account_id = 1;
INSERT INTO transactions (account_id, amount, type) VALUES (1, 100, 'deposit');
-- 根据业务逻辑判断是否提交事务
IF everything_ok THEN
    COMMIT; -- 成功,提交事务,所有更改永久保存
ELSE
    ROLLBACK; -- 发生错误,回滚事务,撤销所有更改
END IF;

在没有显示开始事务的情况下执行SQL操作,大多数数据库系统会默认为每条单独的SQL语句自动提交事务,即执行完一条语句就相当于执行了一次COMMIT。而通过 START TRANSACTION; 明确开启事务,可以让开发者手动控制事务的边界,这对于需要执行多个操作并确保它们作为一个整体成功或失败的场景至关重要。

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

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

相关文章

Python数组类+AI插件

目录 规划实现初始化插入删除查找 AI插件单测注释调优建议 小结 规划 先想清楚都写哪些,然后再动手操作 用Python写了一个简单数组类,首先思考下都写哪些功能: 插入删除查找用插件做单元测试和写注释 目的只是实现一个简单的数组类&#x…

对2023年图灵奖揭晓看法

2023年图灵奖揭晓,你怎么看? 2023年图灵奖,最近刚刚颁给普林斯顿数学教授 Avi Wigderson!作为理论计算机科学领域的领军人物,他对于理解计算中的随机性和伪随机性的作用,作出了开创性贡献。这些贡献不仅推…

chrome 查看版本安装路径、cmd命令行启动浏览器

chrome 查看版本安装路径 浏览器输入 chrome://version/cmd命令行启动浏览器 参考:https://blog.csdn.net/bigcarp/article/details/121426245 "C:\Program Files\Google\Chrome\Application\chrome.exe" www.baidu.com"C:\Program Files\Google…

9种单片机常用的软件架构

长文预警,加代码5000多字,写了4个多小时,盘软件架构,这篇文章就够了! 可能很多工程师,工作了很多年,都不会有软件架构的概念。 因为我在做研发工程师的第6年,才开始意识到这个东西,在…

meterpreter运行run getgui -e报错

meterpreter运行run getgui -e报错 meterpreter > run getgui -e [!] Meterpreter scripts are deprecated. Try post/windows/manage/enable_rdp. [!] Example: run post/windows/manage/enable_rdp OPTIONvalue [...] [-] The specified meterpreter session script cou…

云仓酒庄央视广告战略签约,旗下品牌将迎来全新发展机遇

近日,备受瞩目的云仓酒庄2024-2025年度央视广告战略签约仪式盛大举行,云仓酒庄副总裁周玄代表云仓酒庄签约。云仓酒庄与中视中州(央视代理机构)成功签约,将在CCTV 2财经、CCTV 15音乐、CCTV 7国防军事、CCTV 4中文国际…

kubernetes共享存储原理

存储原理 1. PersistentVolume (PV):存储资源的容器2. PersistentVolumeClaim (PVC):用户的需求清单3. StorageClass:存储服务的菜单A. Container Storage Interface (CSI)小总结PersistentVolume (PV)PersistentVolumeClaim (PVC)静态分配 v…

1.Spring入门-初识Spring核心思想IOC和快速入门

Spring Spring Framework 是一个开源的 Java/Java EE 全功能栈(full-stack)的应用程序框架,以 Apache 许可证形式发布,也有 .NET 平台上的移植版本。该框架基于 Expert One-on-One Java EE Design and Development(IS…

hive使用hplsql进行etl或其它数据加工

参照 https://cwiki.apache.org/confluence/pages/viewpage.action?pageId59690156 http://www.hplsql.org/doc Hive HPL/SQL,即Hive Hybrid Procedural SQL一个开源工具,它为hive实现了过程性的SQL功能,类似Oracle的PLSQL。从hive 2.0.0开…

Spring中的声明式事务详解

1 事务概述 在JavaEE企业级开发的应用领域,为了保证数据的完整性和一致性,必须引入数据库事务的概念,所以事务管理是企业级应用程序开发中必不可少的技术。 事务就是一组由于逻辑上紧密关联而合并成一个整体(工作单元)的多个数据库操作&…

Springboot+Vue项目-基于Java+MySQL的家政服务平台系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

Java中一个汉字究竟占几个字节?

前言 在今天,“Java中一个汉字占几个字符”的问题,让我提起了兴趣 在我的记忆中,一个字符应该是占两个字符的。但看了他人的回答 发现自己对这方面了解非常片面,于是痛定思痛潜心学习,写下这篇博客 总结不足文章目录 …

0425DormAJAX项目

0425DormAJAX项目包-CSDN博客 数据库字段 添加界面: 初始状态: 点击性别,宿舍号使用ajax动态添加: 学生主界面: 实现分页查询: 点击修改学生宿舍,查看换寝记录,ajax动态显示列表&…

引入高德地图

1、配置 试试keytool 有没有反应 就算java -version没问题也一定是你没配path路径 在系统中配到bin就行了 2、获取密钥 网上真的坑太多了还有有chat问了一下 keytool -v -list -keystore "C:\Users\xxxx\.android\debug.keystore"执行这个你看你的 3、去高德地…

QFileDialog窗口没有文件选择路径框问题的处理方法

QFileDialog作为QT自带的文件对话框,其界面有挑选文件路径的区域 但在某些操作系统下(如欧拉操作系统),文件挑选框QFileDialogLineEdit可能会隐藏,导致无法选择文件路径 解决方法: QFileDialog* fd; fd-&…

【团体程序设计天梯赛】往年关键真题 L2-026 小字辈 递归 L2-027 名人堂与代金券 排序 详细分析完整AC代码

【团体程序设计天梯赛 往年关键真题 详细分析&完整AC代码】搞懂了赛场上拿下就稳 【团体程序设计天梯赛 往年关键真题 25分题合集 详细分析&完整AC代码】(L2-001 - L2-024)搞懂了赛场上拿下就稳了 【团体程序设计天梯赛 往年关键真题 25分题合…

2024最新docker部署gitlab

docker部署gitlab 快速命令 1 拉取镜像 docker pull gitlab/gitlab-ce2 启动容器 docker run -itd \-p 9980:80 \-p 9922:22 \-v /opt/soft/docker/gitlab/etc:/etc/gitlab \-v /opt/soft/docker/gitlab/log:/var/log/gitlab \-v /opt/soft/docker/gitlab/opt:/var/opt/g…

Xinlinx FPGA如何降低Block RAM的功耗

FPGA中降低Block RAM的功耗有两种方式,分别是选择合适的写操作模式以及Block RAM的实现算法及综合设置。我们知道对于采用IP核生成对应的RAM时,会有最小面积算法、低功耗算法以及固定原语,但是采用最小功耗算法有时由于级联长度导致无法实现&…

1 集成学习基础

目录 0 简述 1 集成学习算法代表 1.1 Bagging 1.1.1 模型预测的结果组合的方式 1.2 stacking 1.3 blending和stacking优缺点对比 0 简述 集成学习,典型的群殴策略,但是如何组织让彼此配合得当发挥最大的价值是一个值得思考的问题。 集成学习是一…

MySQL-笔记-08.数据库编程

目录 8.1 编程基础 8.1.1 基本语法 8.1.2 运算符与表达式 1. 标识符 2. 常量 (1) 字符串常量 (2)日期时间常量 (3)数值常量 (4)布尔值常量 (5)NULL…
最新文章