Bootstrap

【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 语句来提交事务,并将所做的更改永久保存到数据库中。如果在这个过程中遇到了错误,并且我们没有使用错误处理机制来捕获和处理这些错误,则可能需要回滚事务来撤销所做的更改。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;