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

news2024/11/16 16:18:08

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

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.coloradmin.cn/o/1919687.html

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

相关文章

Pytorch张量

在conda的环境中安装Jupyter及其他软件包 Pytorch 建立在张量(tensor)之上,Pytorch张量是一个 n 维数组,类似于 NumPy 数组。专门针对GPU设计,可以运行在GPU上以加快计算效率。换句话说,Pytorch张量是可以运…

WebGIS基础原理

该部分内容与部分插图、学习框架的主要参考的网站与博主如下(也趁机分享给大家): OSGeo开源WebGIS在线教程:http://webgis.cn/ OSGeo《地理信息系统原理》:https://www.osgeo.cn/gis-tutorial/index.html OSGeo《Pyth…

30.ROM-IP核的调用

(1)ROM IP核简介: ROM是只读存储器,是一种只能读出事先锁存的固态半导体存储器。其特性是一旦存储资料就无法再将之改变或删除,并且资料也不会因为电源关闭而消失。(掉电不丢失) FPGA使用内部RA…

鸿蒙语言基础类库:【@ohos.util.HashMap (非线性容器HashMap)】

非线性容器HashMap 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 H…

算法 | NOIP1999 Cantor表

算法篇——Cantor的数表 - SteveWang - 博客园 (cnblogs.com) #include <bits/stdc.h> using namespace std; int high(int n) {return n*(n1)/2; } int main() {int k;cin>>k;int n1;while(1){if(high(n)>k){break;}n;} int mhigh(n);int wm-k1;if(n%20){cout…

Autosar诊断实战系列28-2E写DID Pending期间偶发回NRC0x13问题排查

本文框架 前言1.问题描述2.问题复现3.问题分析问题1:为何在2E Pending期间会发送功能寻址的10 01回NRC13?问题2:在ECU Pending期间收到功能寻址10 01,MCU需要如何处理?问题3:DcmDslConnection是如何定义的?问题4:功能寻址于物理寻址是否对应不同的DcmDslConnection?问…

vue 下拉菜单树形结构——vue-treeselect的组件使用

参考&#xff1a; https://www.cnblogs.com/syjtiramisu/p/17672866.htmlhttps://www.cnblogs.com/syjtiramisu/p/17672866.html vue-treeselect的使用 - 简书下载依赖 使用https://www.jianshu.com/p/459550e1477d 实际项目使用&#xff1a;

【087】基于SpringBoot+Vue实现的房租租赁管理系统

系统介绍 视频演示 基于SpringBootVue实现的房租租赁管理系统采用前后端分离架构&#xff0c;系统分为管理员、房东、用户三种角色&#xff0c;实现了登陆与注册、在线聊天、预约看房、房源管理、用户管理、租房、投诉举报、收藏、房主申请等功能 技术选型 开发工具&#x…

Protobuf: 大数据开发中的高效数据传输利器

作为一名大数据开发者&#xff0c;我经常需要处理海量的数据传输和存储。在这个过程中&#xff0c;选择一个高效、可靠的数据序列化工具至关重要。今天&#xff0c;我想和大家分享一下我在项目中使用 Protobuf 的经历。 目录 故事背景Protobuf 简介优点&#xff1a; 实战案例示…

Go-知识测试-示例测试

Go-知识测试-示例测试 1. 定义2. 例子3. 数据结构4. 编译过程5. 执行过程 建议先看&#xff1a;https://blog.csdn.net/a18792721831/article/details/140062769 Go-知识测试-工作机制 1. 定义 示例测试要保证测试文件以_test.go结尾。 测试方法必须以ExampleXxx开头。 测试文…

常见点云处理总结汇总

点云处理是一系列操作和技术&#xff0c;用于分析和处理三维点云数据&#xff0c;以提取有用的信息并生成可视化结果。以下是常见的点云处理方法及其简要说明&#xff1a; 1. 点云预处理 滤波&#xff1a;去除噪声和无效点&#xff0c;如使用统计滤波、半径滤波等。下采样&a…

PostgreSql中的JSON数据类型

PostgreSQL 提供了两种 JSON 数据类型&#xff1a;JSON 以及 JSONB。这两种类型主要的区别在于数据存储格式&#xff0c;JSONB 使用二进制格式存储数据&#xff0c;更易于处理。 PostgreSQL 推荐优先选择 JSONB 数据类型。 两种数据类型之间的区别&#xff1a; 功能JSONJSONB存…

【Linux】日志

日志是记录软件运行过程中发生的事件的一种手段&#xff0c;通常包含以下内容&#xff1a; 时间戳&#xff1a;记录日志条目创建的确切时间。这对于追踪事件发生的时间顺序至关重要。日志级别&#xff1a;表示日志信息的严重性或重要性&#xff0c;常见的级别包括 DEBUG、INFO…

2024年西安铁一中集训DAY1---- 杂题选讲

文章目录 牛客练习赛125 E 联谊活动&#xff08;枚举&#xff0c;分讨&#xff09;牛客练习赛125 F 玻璃弹珠&#xff08;类莫队&#xff0c;离线询问&#xff0c;数据结构&#xff09;2024ccpc长春邀请赛 D Parallel Lines&#xff08;随机化&#xff09;2024ccpc长春邀请赛 E…

Java高级重点知识点-24-函数式接口

文章目录 函数式接口函数式编程常用函数式接口 函数式接口 有且仅有一个抽象方法的接口。 格式&#xff1a; 修饰符 interface 接口名称 {public abstract 返回值类型 方法名称(可选参数信息);// 其他非抽象方法内容 }public interface MyFunctionalInterface {void myMethod…

二进制补码计算

基本知识 原码&#xff08;Sign and Magnitude&#xff09;:原码是一种最简单的表示法&#xff0c;使用符号位和数值位来表示整数。 符号位&#xff1a;最高位是符号位&#xff0c;0表示正数&#xff0c;1表示负数。 数值位&#xff1a;剩下的位表示数值的大小。反码&#xf…

2串锂电池5V升压15V 18V 2.5A 升压恒压IC H6391芯片 低待机功耗

H6391是一款升压恒压转换器芯片&#xff0c;适用于多种需要2.6-5V输入升压至较高电压的应用场景。但值得注意的是&#xff0c;在您提供的描述中提到输出可调达。 输出电压范围&#xff1a;H6391的直接输出电压可能无法直接达到15V或18V。 输出电流&#xff1a;H6391支持的可调…

Python类与对象01

1、理解使用对象完成数据组织的思路 1.1类和对象的基本理解 理解类&#xff1a;从现实世界到编程世界 类由三个部分组成&#xff1a;类名、类的属性、类的方法。类的定义实际上是描述事物的一种方法&#xff0c;在现实世界中&#xff0c;事物都是有属性和行为的。通过类&…

机器学习 | 对K-Means聚类假设的研究演示及实践示例

我们在Scikit-learn对K-means假设的调查中探索了揭示算法优势和局限性的场景。我们研究了K-means对不正确的聚类大小的敏感性&#xff0c;它在各向异性分布中面临的困难&#xff0c;它在不同的聚类方差中面临的困难&#xff0c;以及使用合成数据集的大小不均匀的聚类问题。我们…

2024.7.11作业

1.使用递归实现 求 n 的 k 次方 #include <stdio.h> int digui(int n,int k) { if(k0) //任何数的0次方等于1 { return 1; } else { return n*digui(n,k-1); //递归 } } int main(int argc,const char *argv[]) { in…