SQL Server 中的事务是一组连续的解释或查询,用于在数据集中执行单个或多个任务。每个事务都可能有单一的阅读、撰写、更新或删除任务或大量任务的混合。在 SQL Server 中,每个事务都应该发生两件事:
- 当事务提交时,所有更改都有效。
- 或者另一方面,当事务回滚时,所有的更改都被分散了。
在集合中的任务全部完成之前,事务无法找到成功。它的真正意图是假设任何争用都失败了,交易活动就会失败。每个事务都以第一个可执行 SQL 解释开始,并在发现提交或回滚时关闭,无论是明确地还是可验证的。它明确地使用 COMMIT 或 ROLLBACK 语句,并且在使用 DDL 语句时可验证。
该模型将利用金融数据集框架来理解交易的概念。假设银行客户需要使用 ATM 模式从他们的记录中提取现金。ATM 可以通过三个步骤完成此活动:
- 第一步是真正查看记录中提到的金额的可访问性。
- 如果金额可访问,则后续步骤会从记录中扣除该金额,并刷新记录余额。
- 第三步是在日志记录中组成现金提取活动。这一步说明交易是成功的还是失败的。如果有效,请将信息更改组合到数据集中。否则,交易将再次折叠到其过去的状态。
事务背后的基本规则是,假设其中一个断言返回错误,则将整个更改安排移回以保证信息的正确性。此外,假设交易生效,所有更改都将在信息库中持久保存。
因此,如果在从 ATM 取款时出现停电或其他问题,交易可确保我们的平衡保持可靠。交易声明最好地完成这些任务,因为交易的四个关键属性使所有任务更加精确和可靠。事务的四个属性被称为 ACID。

交易属性:
事务属性被称为 ACID(原子性、一致性、隔离性、持久性)属性,下面详尽地讨论这些属性:
SQL 服务器事务:
- 原子性:此属性保证为事务记住的所有断言或任务都应有效执行。否则,整个事务将被缩短,并且所有任务都会在任何活动失败时再次折叠到它们过去的状态。
- Consistency:此属性保证数据集仅在有效提交事务时更改状态。它还负责保护数据免受崩溃影响。
- 隔离:此属性确保所有交易都与不同的交易隔离开来,这意味着交易中的每个活动都是自主进行的。它还保证断言彼此之间是直接的。
- 持久性:此属性确保无论框架是否崩溃或失败,已提交事务的后遗症始终存在于数据集中。
SQL中的事务模式:
- Auto-commit Transaction Mode: SQL Server默认的事务模式。它将每个 SQL 解释视为一个事务,结果同样被提交或移回。因此,富有成效的解释会迅速投入使用,而遭到轰炸的断言会迅速撤回。
- 隐式事务模式: 此模式允许 SQL Server 为每个 DML 解释启动隐式事务,但它明确要求在断言结束时使用提交或回滚命令。
- 显式事务模式: 这种模式的特点是客户端允许我们精确区分事务的开始和结束焦点。如果发生致命的错误,它自然会缩短。
事务控制:
接下来是用于控制事务的命令:
- BEGIN TRANSACTION:这是一个订单,显示每笔交易的开始。
- COMMIT:这是一个命令,用于保存数据集中所有时间的进程。
- ROLLBACK:这是一个用于丢弃所有更改并进入其过去状态的命令。
- SAVEPOINT:此命令在交易集合中创建焦点,允许我们仅返回交易的一部分而不是整个交易。
- RELEASE SAVEPOINT:用于删除普遍存在的SAVEPOINT。
- SET TRANSACTION:此命令为事务提供一个名称,可用于使其只读或读取/组合或将其委托给特定的回滚片段。
以下命令用于控制交易。重要的是要注意这些断言不能在创建表格时使用,而只能与 DML 命令一起使用,例如 - INSERT、UPDATE 和 DELETE。
1 . BEGIN TRANSACTION:它显示显式或开始交易的开始标记。
句法:
BEGIN TRANSACTION transaction_name ;
2. SET TRANSACTION:在交易上放置名称。
句法:
SET TRANSACTION [ READ WRITE | READ ONLY ];
3. COMMIT:如果一切都与所有断言一起在一个单独的事务中,所有更改都一起记录在数据集中称为专用。COMMIT 命令将自上次 COMMIT 或 ROLLBACK 命令以来的每一个事务都保存到信息库中。
句法:
COMMIT;
以下是一个模型,它将从表中删除年龄 = 20 的那些记录,然后提交数据集中的进程。
查询:
DELETE FROM Student WHERE AGE = 20;
COMMIT;
4. ROLLBACK:如果任何一个SQL集合语句出现错误,所有的改动都应该被截断。涉及切换更改的方法称为回滚。自上次 COMMIT 或 ROLLBACK 命令发出以来,必须使用此命令来修复事务。
句法:
ROLLBACK;
从表中删除年龄 = 20 的记录,然后回滚数据集中的进程。
查询:
DELETE FROM Student WHERE AGE = 20;
ROLLBACK;
5. SAVEPOINT:在要回滚的事务集合中创建指南。
SAVEPOINT 是交易中的一个点,您可以在其中将交易稍微后退,而无需将整个交易后退。
Savepoint 订单的语法:
SAVEPOINT SAVEPOINT_NAME;
该订单专门用于在每笔交易中创建 SAVEPOINT。
总体 ROLLBACK 用于修复一组事务。
返回保存点顺序的语法:
ROLLBACK TO SAVEPOINT_NAME;
您可以随时回滚到任何保存点,以将合适的信息返回到其唯一状态。
从上面的模型Sample table1,
从表中删除年龄 = 20 的记录,然后通过保留保存点回滚数据集中的进程。
查询:
SAVEPOINT SP1;
//Savepoint created.
DELETE FROM Student WHERE AGE = 20;
//deleted SAVEPOINT SP2;
//Savepoint created.
这里SP1是删除前创建的第一个SAVEPOINT。在这个模型中发生了一次擦除。
删除后再次创建 SAVEPOINT SP2。
删除已经发生,让我们接受你已经调整了你的观点并选择回滚到你认为是删除前的 SP1 的保存点。
这个断言撤销了删除,
ROLLBACK TO SP1;
//Rollback completed.
6. RELEASE SAVEPOINT :- 此命令用于删除您创建的 SAVEPOINT。
句法:
RELEASE SAVEPOINT SAVEPOINT_NAME
当一个 SAVEPOINT 被释放时,您再也不能使用 ROLLBACK 命令来修复自上次 SAVEPOINT 以来执行的事务。
它用于启动信息库事务并用于指示随后的事务的质量。
原文标题:How to create and Rollback Transaction in SQL query? Example Tutorial
原文链接:https://www.sqlrevisited.com/2022/09/how-to-create-and-rollback-transaction.html




