【SQL】DML、DDL、ROLLBACK 、COMMIT详解

在这里插入图片描述
在这里插入图片描述

DML

DML(Data Manipulation Language)数据操作语言,是用于对数据库中的数据进行基本操作的一种编程语言。DML是数据库管理系统(DBMS)中的一个重要部分,它允许用户或应用程序对数据库中的数据进行增、删、改、查等操作。以下是DML数据操作语言的详细介绍:

DML的基本功能

DML的主要功能包括以下几个方面:

插入数据:使用INSERT语句将新的数据记录插入到数据库中。这可以是单条记录,也可以是批量插入。
删除数据:使用DELETE语句从数据库中删除一个或多个数据记录。在删除数据时,可以指定条件,以删除满足条件的记录。
修改数据:使用UPDATE语句修改数据库中的数据记录。可以修改记录的一个或多个字段,同样可以指定条件以修改满足条件的记录。
查询数据:使用SELECT语句从数据库中检索出满足条件的数据记录。SELECT语句可以非常复杂,包括各种条件、排序、分组和聚合等操作。

DML的常用语句

在DML中,最常用的语句是INSERT、DELETE、UPDATE和SELECT。以下是这些语句的简要说明:

INSERT语句:
语法:INSERT INTO 表名 [(字段1, 字段2, …)] VALUES (值1, 值2, …);
功能:将新的数据记录插入到指定的表中。如果指定了字段,则只需插入相应字段的值;如果没有指定字段,则需要插入表中所有字段的值。
DELETE语句:
语法:DELETE FROM 表名 WHERE 条件;
功能:从指定的表中删除满足条件的记录。如果没有指定条件,则会删除表中的所有记录。
UPDATE语句:
语法:UPDATE 表名 SET 字段名 = 新值 WHERE 条件;
功能:修改指定表中满足条件的记录的一个或多个字段的值。
SELECT语句:
语法:SELECT 字段名1, 字段名2, … FROM 表名 WHERE 条件 ORDER BY 字段名 [ASC|DESC];
功能:从指定的表中检索出满足条件的数据记录,并可以按照指定的字段进行排序。

DML的特点

DML的主要特点是其操作对象是数据库中的数据记录,而不是数据库的结构。与DDL(Data Definition Language,数据定义语言)不同,DML不用于创建或修改数据库的结构,如创建表、修改表结构等。DML的操作是面向数据的,它允许用户或应用程序对数据进行增、删、改、查等操作,以满足不同的业务需求。

DML的注意事项

事务控制:DML操作通常与事务控制相关。在执行DML操作时,需要考虑事务的完整性,确保数据的一致性和准确性。
权限控制:对数据库进行DML操作需要相应的权限。不同的用户或角色可能具有不同的权限,以控制对数据库数据的访问和修改。
性能优化:在执行DML操作时,需要考虑性能优化。例如,可以通过索引、查询优化等技术来提高查询和更新的效率。
综上所述,DML是数据库管理系统中用于操作数据的重要语言。它允许用户或应用程序对数据库中的数据进行增、删、改、查等操作,以满足不同的业务需求。在使用DML时,需要注意事务控制、权限控制和性能优化等方面的问题。

DDL

DDL(Data Definition Language)是数据定义语言的缩写,它是SQL(Structured Query Language,结构化查询语言)的一部分,用于定义数据库中的对象及其结构。DDL的主要作用是对数据库内部的对象进行创建、删除、修改等操作,这些对象包括数据库、表、视图、索引等。

DDL的主要功能

创建数据库和表:使用CREATE语句来创建新的数据库和表,并定义表的结构,如表名、字段名、字段类型、主键、外键等。
修改数据库和表结构:使用ALTER语句来修改现有数据库和表的结构,如添加、删除或修改字段,修改字段的数据类型,添加或删除索引等。
删除数据库和表:使用DROP语句来删除整个数据库或数据库中的表,以及表中的所有数据。

DDL的常用语句

DDL的常用语句主要包括以下几种:

CREATE:用于创建数据库、表、视图等对象。例如,CREATE DATABASE 数据库名; 用于创建数据库,CREATE TABLE 表名 (字段名 字段类型, …); 用于创建表。
ALTER:用于修改数据库、表、视图等对象的结构。例如,ALTER TABLE 表名 ADD 字段名 字段类型; 用于向表中添加新字段,ALTER TABLE 表名 DROP COLUMN 字段名; 用于删除表中的字段。
DROP:用于删除数据库、表、视图等对象。例如,DROP TABLE 表名; 用于删除表及其所有数据,DROP DATABASE 数据库名; 用于删除整个数据库。

DDL的特点

面向结构的:DDL的操作对象是数据库的结构,而不是数据本身。它用于定义和修改数据库对象的结构,如创建表、修改表结构等。
不可逆的:DDL操作通常是不可逆的,一旦执行,就会对数据库的结构产生永久性的影响。例如,删除表的操作会删除表中的所有数据,并且无法恢复。
权限要求高:执行DDL操作通常需要较高的权限,因为DDL操作会影响到数据库的结构和数据的完整性。

DDL的注意事项

备份数据:在执行DDL操作之前,特别是删除或修改表结构之前,务必备份相关数据,以防止数据丢失或损坏。
低负载时执行:DDL操作可能会对数据库的性能产生影响,因此建议在低负载时执行DDL操作,以避免对正在运行的事务和查询产生不良影响。
检查语法和逻辑:在执行DDL操作之前,务必检查语句的语法和逻辑,确保操作符合实际需求,并避免出现语法错误或逻辑错误。
综上所述,DDL是数据库管理系统中用于定义和修改数据库结构的重要语言。它允许数据库管理员或开发人员通过CREATE、ALTER、DROP等语句来创建、修改和删除数据库对象,从而实现数据库结构的灵活管理。在使用DDL时,需要注意备份数据、选择低负载时执行、检查语法和逻辑等事项,以确保操作的准确性和安全性。

ROLLBACK

ROLLBACK 是 SQL 中的一个事务控制语句,它用于撤销自上一个 COMMIT 或 ROLLBACK 语句以来对数据库所做的所有更改。在数据库管理系统(DBMS)中,事务是一个或多个 SQL 语句的集合,这些语句作为一个工作单元一起执行,以保证数据的完整性和一致性。

当一个事务被 ROLLBACK 时,该事务中所有对数据库的更改都会被撤销,数据库会回到事务开始之前的状态。这通常用于处理错误情况或当事务中的某些条件未满足时,以防止对数据库造成不可预知的影响。

使用场景

错误处理:如果在执行事务的过程中遇到错误,可以使用 ROLLBACK 来撤销已经执行的更改,以避免数据不一致。
条件检查:在事务的末尾,可能需要检查某些条件是否满足。如果不满足,可以使用 ROLLBACK 来撤销更改。
并发控制:在并发环境中,为了避免多个事务相互干扰,可能需要在某些情况下使用 ROLLBACK 来撤销事务的更改。
语法

ROLLBACK;

或者,如果事务被赋予了名称(在某些数据库系统中支持),可以使用以下语法:

ROLLBACK TO SAVEPOINT 保存点名;

这里,SAVEPOINT 是事务中的一个点,可以在该点之后执行 ROLLBACK TO SAVEPOINT 以撤销到该点之前的所有更改,而不是整个事务的更改。

注意事项

ROLLBACK 只撤销自上一个 COMMIT 或 ROLLBACK 以来对数据库所做的更改。
如果在自动提交模式下(某些数据库系统的默认设置),每个单独的 SQL 语句都被视为一个单独的事务,并且立即提交。在这种情况下,ROLLBACK 可能无法撤销最近的更改,除非显式地开始了一个事务。
在执行 ROLLBACK 后,如果需要重新执行事务中的操作,必须显式地重新执行它们。
ROLLBACK 通常不会释放由事务中 SQL 语句获取的资源(如锁),但会撤销对数据库所做的更改。然而,具体的行为可能取决于数据库系统的实现。
示例
假设你正在执行一个向表中插入数据的事务,但在插入过程中发现了一些问题,需要撤销这些更改:

BEGIN TRANSACTION; -- 开始事务(在某些数据库系统中可能不需要此语句)  INSERT INTO employees (name, department) VALUES ('John Doe', 'Sales');  
-- 假设这里发现了错误,需要撤销上面的插入操作  ROLLBACK; -- 撤销自上一个 COMMIT 或 ROLLBACK 以来的所有更改

请注意,具体的 SQL 语法和事务控制机制可能因不同的数据库系统而异。因此,在实际应用中,请参考你所使用的数据库系统的文档。

COMMIT 是 SQL(Structured Query Language,结构化查询语言)中的一个事务控制语句,它用于将自上一个 COMMIT 或事务开始以来对数据库所做的所有更改永久保存到数据库中。在数据库管理系统(DBMS)中,事务是一组作为一个工作单元执行的 SQL 语句,这些语句要么全部成功执行,要么在遇到错误时全部撤销,以确保数据的完整性和一致性。

使用场景

数据完整性:当一系列操作需要作为一个不可分割的整体来执行时,使用 COMMIT 可以确保这些操作要么全部成功,要么在遇到错误时全部回滚到操作之前的状态。
性能优化:通过减少数据库的 I/O 操作次数,COMMIT 可以帮助提高事务处理的性能。例如,在批处理大量数据时,可以定期执行 COMMIT 来保存更改,而不是在每次插入或更新后都立即执行。
并发控制:在并发环境中,COMMIT 语句的执行可以释放事务占用的资源(如锁),使得其他事务可以访问这些资源。
语法

COMMIT;

在某些数据库系统中,如果你正在使用显式的事务控制(即不是自动提交模式),则需要在事务结束时执行 COMMIT 语句来提交更改。

注意事项

在执行 COMMIT 之后,对数据库所做的更改就成为永久性的,并且不能再通过 ROLLBACK 语句来撤销。
如果事务在执行过程中遇到错误,并且没有使用错误处理机制来捕获和处理这些错误,则可能需要手动回滚事务(使用 ROLLBACK 语句)来撤销所做的更改。
在某些数据库系统中,如果你没有在事务块中明确地使用 COMMIT 或 ROLLBACK 语句来结束事务,则系统可能会在事务块结束时自动提交事务(这取决于数据库的配置和是否处于自动提交模式)。
在执行 COMMIT 时,可能会遇到锁定冲突等并发问题。为了确保数据的一致性和完整性,数据库系统可能会等待其他事务释放锁或回滚,直到能够成功提交事务。
示例
以下是一个简单的示例,展示了如何在 SQL 事务中使用 COMMIT 语句:

BEGIN TRANSACTION; -- 开始事务(在某些数据库系统中可能不需要显式地开始事务)  -- 在这里执行一系列的 SQL 语句,如 INSERT、UPDATE、DELETE 等  
INSERT INTO employees (name, department) VALUES ('Jane Doe', 'Marketing');  
UPDATE employees SET salary = salary * 1.1 WHERE department = 'Sales';  -- 如果没有遇到错误,则提交事务  
COMMIT;

在这个示例中,我们首先开始了一个事务,然后执行了两个 SQL 语句来插入和更新数据。如果没有遇到任何错误,我们执行 COMMIT 语句来提交事务,并将所做的更改永久保存到数据库中。如果在这个过程中遇到了错误,并且我们没有使用错误处理机制来捕获和处理这些错误,则可能需要回滚事务来撤销所做的更改。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【鸿蒙学习笔记】文件管理

官方文档:Core File Kit简介 目录标题 文件分类什么是应用沙箱? 文件分类 应用文件,比如应用的安装包,自己的资源文件等。用户文件,比如用户自己的照片,录制的音视频等。 什么是应用沙箱? 应…

Socks5代理为何比HTTP代理快?

在网络世界中,代理服务器扮演着重要的角色,它们能够帮助我们访问被限制的网站、提高网络安全性以及优化网络性能。其中,Socks5代理和HTTP代理是两种常见的代理类型。然而,很多用户发现,相较于HTTP代理,Sock…

ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过

web164 和 web165 的利用点都是二次渲染,一个是 png,一个是 jpg 目录 1、web164 2、web165 二次渲染: 网站服务器会对上传的图片进行二次处理,对文件内容进行替换更新,根据原有图片生成一个新的图片,这样…

3D互动+AR试戴,赋能珠宝品牌线上营销!

随着电商浪潮的汹涌而至,珠宝这一传统上依赖实体店铺销售的行业,正积极拥抱线上转型的浪潮。然而,面对珠宝商品高客单价及消费者对于亲身体验的强烈需求,线上销售面临诸多挑战,尤其是图片展示难以全面展现珠宝魅力&…

Git 操作总结

1. 安装、Git 环境配置 1.1 安装 Git 官方版本可以在 Git 官方网站下载:打开 https://git-scm.com/download/win,选择相应版本即可。 Git 安装完成后,可以在开始菜单中看到 Git 的三个启动图标(Git Bash、Git CMD、Git GUI&…

交叉熵损失函数的使用目的(很肤浅的理解)

第一种使用方法 import torch from torch import nn # Example of target with class indices loss nn.CrossEntropyLoss() input torch.randn(3, 5, requires_gradTrue) target torch.empty(3, dtypetorch.long).random_(5) output loss(input, target) output.backward(…

keepalived高可用集群

一、keepalived: 1.keepalive是lvs集群中的高可用架构,只是针对调度器的高可用,基于vrrp来实现调度器的主和备,也就是高可用的HA架构;设置一台主调度器和一台备调度器,在主调度器正常工作的时候&#xff0…

阿里云操作系统智能助手OS Copilot实验测评报告

阿里云操作系统智能助手OS Copilot产品说明 阿里云操作系统智能助手 OS copilot 是一款基于云原生技术的操作系统,具有智能化、自动化和可扩展性等特点。它可以帮助用户快速构建、部署和管理云上应用,提高运维效率和系统稳定性。OS copilot 支持多种主流…

【踩坑】解决undetected-chromedriver报错cannot connect to-chrome

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 更新: 发现一个非常好用的项目,直接内置uc: GitHub - seleniumbase/SeleniumBase: 📊 Pythons all-in…

int类型变量表示范围的计算原理

文章目录 1. 了解2. 为什么通常情况下int类型整数的取值范围是-2147483648 ~ 21474836473. int类型究竟占几个字节4. 推荐 1. 了解 通常情况下int类型变量占4个字节,1个字节有8位,每位都有0和1两种状态,所以int类型变量一共可以表示 2^32 种状…

访问者模式(Visitor Pattern)

访问者模式(Visitor Pattern) 定义 访问者模式(Visitor Pattern) 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 该模式的主要思想是将作用于某种数据结构中的各…

【Linux】线程池|单例模式|STL、智能指针线程安全|读者写者问题

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:理解【Linux】线程池|单例模式|STL、智能指针线程安全|读者写者问题。 > 毒鸡汤:有些事情,总是不明白,所以我不会…

零信任安全新纪元:零信任沙箱的源代码保护策略

在数字世界的战场上,安全防护是每一家企业的生命线。今天,我们要介绍的是一款革命性的安全工具——SDC沙箱,它以零信任的理念为核心,为您的源代码和敏感数据筑起一道坚不可摧的防线。 什么是零信任沙箱? 零信任&…

Outlook邮件提醒通知功能详解:设置教程!

Outlook邮件提醒通知使用指南?如何个性设计邮件通知? 为了帮助用户更好地管理邮件,Outlook提供了强大的邮件提醒通知功能。AokSend将详细介绍如何设置和使用Outlook邮件提醒通知功能,以提高工作效率和管理时间的能力。 Outlook邮…

Agent Group复现

项目链接 温馨提示,token量很大,最好搞的免费额度的。例如智谱注册即赠额度。 git clone https://github.com/MikeGu721/AgentGroup.git cd AgentGroup pip install -r requirements.txt # set your api url and key in ./prompt/utils.py 这里可以配置…

单例模式(Singleton Pattern)

单例模式(Singleton Pattern) 定义 是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。 隐藏起所有的构造方法。 属于创建型模式。 适用场景 确保任何情况下都绝对只有一个实例。 比如数据库连接池、配置文件读取、缓…

android13 cat /proc/cupinfo没有Serial问题

1.前言 我们有些客户是使用cpuinfo节点去获取系统的cpuid的,如下: cat /proc/cupinfo processor : 0 BogoMIPS : 48.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU impleme…

分享一个 .NET 通过监听器拦截 EF 消息写日志的详细例子

前言 EF 开发效率确实很高也很便捷,但当它发生错误时,也挺让人头疼的,为什么?因为 EF 就像是一个黑盒子,一切全被封装起来,出错的时候很难定位原因,如果能够知道并打印 EF 生成的 SQL 语句&…

UML-各种图

什么是类图 定义系统中的类,描述类的内部结构(属性、方法等),表示类之间的关系(泛化、实现、依赖、关联、聚合、组合)。 UML表示类图 上图中左侧图形是一个常见的类图, 类名:在顶…

Web浏览器485通讯读取RFID卡号js JavaScript

本示例使用设备&#xff1a;485通讯液显带键盘RFID打菲计件读卡器工位机串口可二次开发编程-淘宝网 (taobao.com) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> …