暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server面试题:如何在 SQL 查询中创建和回滚事务?

原创 小小亮 2022-12-14
747

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。



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 以来执行的事务。


它用于启动信息库事务并用于指示随后的事务的质量。


这就是SQL 和数据库中的事务这是一个重要的概念,我相信每个程序员或开发人员都应该了解这一点。如果您对事务以及如何在 SQL 中处理它们有任何问题或反馈,请随时留言。


原文标题:How to create and Rollback Transaction in SQL query? Example Tutorial

原文链接:https://www.sqlrevisited.com/2022/09/how-to-create-and-rollback-transaction.html

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论