SQL Server 中的事务是什么?

  • 事务是应该作为一个单元执行的一组 SQL 语句。这意味着事务确保所有命令都成功或都不成功。如果事务中的命令之一失败,则所有命令都失败,并且在数据库中修改的任何数据都将回滚。

比如您在做一个银行转账操作,这涉及了2个操作, 扣款和收款, 必须保证这2个操作都成功,或者都失败, 只把你的钱扣了,对方没收到,肯定不行的 (有一个操作失败了,都应该回滚到初始状态)

如何在 SQL Server 中实现事务管理?

SQL Server 为我们提供了4个命令来实现管理事务

  1. 开启事务: begin transaction (可简写为 begin tran, 表示事务已开始)
  2. 提交事务: commit (表示事务已成功完成,自事务开始以来执行的所有数据操作操作都提交到数据库,并释放事务占用的资源。)
  3. 回滚事务: rollback transaction (表示事务失败,会将数据回滚到之前的状态。)
  4. 保存事务: save transaction (这用于将事务划分为多个单元,以便用户有机会将事务回滚到某个点或位置。)

在 SQL Server 中实现事务的示例:

请使用以下 SQL 脚本创建并使用所需的测试数据填充 Product 表。

IF OBJECT_ID('dbo.Product') IS NOT NULL
DROP TABLE dbo.Product
GO
CREATE TABLE dbo.Product
(
ProductID INT PRIMARY KEY,
Name VARCHAR(40),
Price INT,
Quantity INT
)
GO
INSERT INTO Product VALUES(101, 'Product-1', 100, 10)
INSERT INTO Product VALUES(102, 'Product-2', 200, 15)
INSERT INTO Product VALUES(103, 'Product-3', 300, 20)
INSERT INTO Product VALUES(104, 'Product-4', 400, 25)

SQL Server 中的 COMMIT 示例。

BEGIN TRANSACTION
INSERT INTO Product VALUES (105,'Product-5',500, 30)
UPDATE Product SET Price = 350 WHERE ProductID = 103
DELETE FROM Product WHERE ProductID = 103
COMMIT TRANSACTION

一旦提交事务,就不能回滚上述三个语句。提交事务后,现在您的产品将具有以下数据。

ProductID Name Price Quantity
101 Product-1 100 10
102 Product-2 200 15
104 Product-4 400 25
105 Product-5 500 30

SQL Server 中的 ROLLBACK TRANSACTION 示例

SQL Server 中的 Rollback 命令用于撤消尚未保存到数据库中的事务,并从事务开始处恢复到初始状态。因此,如果您想将数据恢复到之前的状态,那么您需要在写入 SQL 语句后的任何时间使用 ROLLBACK 命令,但请记住,一旦写入 COMMIT ,我们就无法回滚数据。

请执行以下语句以了解回滚命令。

BEGIN TRANSACTION
INSERT INTO Product VALUES(106,'Product-6',600, 30)
UPDATE Product SET Price =550 WHERE ProductID = 105
DELETE FROM Product WHERE ProductID = 104

当您执行上述事务并且您可以看到该事务未提交,您有机会使用 Rollback Transaction 命令回滚表上的所有操作。

了解 SQL Server 中的 @@Error 全局变量:

这是一个全局变量,我们可以使用这个变量来检查是否有任何错误。让我们看一个例子来理解这一点。正如您在下面的示例中看到的,首先我们使用 Begin Transaction 语句启动事务。然后我们编写两个插入语句。然后我们使用全局系统变量@@ERROR 检查是否有错误。大于 0 的值意味着存在一些错误。如果有一些错误,那么我们回滚事务,否则我们提交事务。

BEGIN TRANSACTION
INSERT INTO Product VALUES(110,'Product-10',600, 30)
INSERT INTO Product VALUES(110,'Product-10',600, 30)
IF(@@ERROR > 0)
BEGIN
Rollback Transaction
END
ELSE
BEGIN
Commit Transaction
END

执行上述事务后,您将看到事务回滚了。这是因为我们尝试在主键列中插入重复值。

为什么我们需要 SQL Server 中的事务?

我们需要 SQL Server 中的事务来保护企业数据(使企业数据保持一致并实现数据完整性)。事务是对数据库的一项或多项更改的传播。例如,如果我们正在创建一条记录或更新一条记录,或者从表中删除一条记录,那么我们正在对表执行事务。控制事务以确保数据完整性和处理数据库错误非常重要。

SQL Server 中事务的经验法则是什么?

SQL Server 中的事务规则告诉事务中的所有语句都应该成功执行,或者这些语句都不执行。

SQL Server 中的事务管理的更多相关文章

  1. 第17周翻译:SQL Server中的事务日志管理的阶梯:第5级:在完全恢复模式下管理日志

    来源:http://www.sqlservercentral.com/articles/Stairway+Series/73785/ 作者:Tony Davis, 2012/01/27 翻译:刘琼滨. ...

  2. 第16周翻译:SQL Server中的事务日志管理,级别3:事务日志、备份和恢复

    源自: http://www.sqlservercentral.com/articles/Stairway+Series/73779/ 作者: Tony Davis, 2011/09/07 翻译:刘琼 ...

  3. SQL Server中的事务日志管理的阶梯,级别1:事务日志概述

    SQL Server中的事务日志管理的阶梯,级别1:事务日志概述 翻译:刘琼滨 谢雪妮 许雅莉 赖慧芳 级别1:事务日志概述 事务日志是一个文件,其中SQL服务器存储了所有与日志文件关联的数据库执行的 ...

  4. Microsoft SQL Server中的事务与并发详解

    本篇索引: 1.事务 2.锁定和阻塞 3.隔离级别 4.死锁 一.事务 1.1 事务的概念 事务是作为单个工作单元而执行的一系列操作,比如查询和修改数据等. 事务是数据库并发控制的基本单位,一条或者一 ...

  5. 【转】SQL Server中的事务与锁

    SQL Server中的事务与锁   了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂 ...

  6. SQL Server中tempdb的管理

    原文:SQL Server中tempdb的管理 资料来自: http://blogs.msdn.com/b/sqlserverstorageengine/archive/tags/tempdb/ ht ...

  7. SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)

    原文:SQL Server中的TempDB管理--TempDB基本知识(为什么需要版本存储区) 参考资料来自: http://blogs.msdn.com/b/sqlserverstorageengi ...

  8. 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架

    简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确 ...

  9. SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

  10. (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务)

    (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务) 1.概念:隐式事务,显式事务,自动提交事务 2.操作:如何设置事务模式 3.存储过程中的事务 XACT_ABORT 1 ...

随机推荐

  1. 即时通讯技术文集(第34期):IM群聊技术合集(Part1) [共15篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第34 期. [- 1 -] 快速裂变:见证微信强大后台架构从0到1的演进历程(一) [链接]  ...

  2. [LC646]最长数对链

    题目概述 给出 n 个数对. 在每一个数对中,第一个数字总是比第二个数字小. 现在,我们定义一种跟随关系,当且仅当 b < c 时,数对(c, d) 才可以跟在 (a, b) 后面.我们用这种形 ...

  3. w3cschool-Spark 编程指南

    https://www.w3cschool.cn/spark/ Spark 编程指南 spark特性: 提供了java scala python 和R的api支持. 在生产环境上扩展超过8000个节点 ...

  4. w3cschool-Groovy 教程

    Groovy的特点 Groovy中有以下特点: 同时支持静态和动态类型. 支持运算符重载. 本地语法列表和关联数组. 对正则表达式的本地支持. 各种标记语言,如XML和HTML原生支持. Groovy ...

  5. GDAL矢量数据集相关接口的资源控制问题

    1. 引言 笔者在<使用GDAL读写矢量文件>这篇文章中总结了通过GDAL读写矢量的具体实现.不过这篇文章中并没有谈到涉及到矢量数据集相关接口的资源控制问题.具体来说,GDAL/OGR诞生 ...

  6. 并发编程 - 线程同步(四)之原子操作Interlocked详解一

    上一章我们了解了原子操作Interlocked类的设计原理及简单介绍,今天我们将对Interlocked的使用进行详细讲解. 在此之前我们先学习一个概念--原子操作. 01.Read方法 该方法用于原 ...

  7. useradd usermod userdel passwd groupadd groupmod groupdel等命令详解

    linux命令参数记忆有些模糊了,记录下.学而时习之,不亦说乎? 1.useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是终极用户.创建新用户useradd,默认的用户家目录会被存放在/ ...

  8. Luogu P4933 大师 题解 [ 绿 ] [ 线性 dp ] [ dp 细节处理 ] [ 限制转移条件优化 ]

    依据值域的 \(O(n^2)\) 做法 这种做法只适用于这种值域小的题,下一种做法才是求等差数列的通解. 我们定义 \(f[i][j]\) 表示以 \(h_i\) 为最后一个数,公差为 \(j\) 的 ...

  9. 燕千云ITSM已支持DeepSeek对接!AI能力持续升级

    春节期间,DeepSeek火爆全网,引发热议,作为国产AI大模型的黑马,DeepSeek凭借独特的训练方法.先进的模型架构和强大的联网推理能力,正不断拓展AI技术的应用边界.其"快思考&qu ...

  10. [国家集训队] happiness 题解

    发现可以做如下建图: 对于前两组输入,从 \(s\) 向所有代表学生的点连一条边,容量为其学习文科的喜悦值:从所有代表学生的点向 \(t\) 连一条边,容量为其学习理科的最大值. 对于后四组输入,建两 ...