T-SQL 事务

17 Mar 2025 | 5 分钟阅读

事务是在数据库上执行的工作单元。任何事务都会从数据库读取数据或向数据库写入数据。

事务是对数据库的一个或多个更改的传播。

例如,如果我们正在记录、更新删除表的历史记录,那么我们会创建表的事务。为了控制数据完整性的操作至关重要,它用于处理数据库的错误。我们将一些SQL查询添加到组中,并执行事务部分。

事务的属性

T-SQL Transactions

事务具有四个属性,它们被称为 ACID 属性 -

  • 原子性 - 它确保工作单元中的所有操作都成功完成;否则,事务会在失败点取消,并且最早的活动会恢复到以前的位置。这意味着要么全部成功,要么全部不成功。
  • 一致性 - 这确保数据库在成功提交的事务中正确更改状态。
  • 一致性 - 将数据库从一个一致状态带到另一个稳定状态,确保将数据库从一个稳定状态传递到另一个恒定状态。
  • 隔离性 - 隔离性确保一个事务与其他事务不同。这使得操作可以相互透明地工作。
  • 持久性 - 这确保在系统发生故障时已提交事务的结果或影响。持久性意味着一旦事务完成,即使发生错误、断电等情况,它也会保留。

事务控制

T-SQL Transactions

这些命令用于控制事务,这些命令如下所示 -

  • COMMIT- 它用于保存更改。
  • ROLLBACK- ROLLBACK 用于回滚更改。
  • SAVEPOINT - SAVEPOINT 在回滚命令的帮助下创建事务组。
  • Set Transport - 它返回事务的名称。

事务命令与 DML 命令(如 INSERT、UPDATEDELETE)一起使用。当创建或删除表时,它不能应用。

在 MS SQL Server 中,要使用事务控制命令,我们需要启动 'trans start' 或事务命令;否则,该命令可能无法工作。

COMMIT 命令

它也被称为 事务命令。 该命令被数据库用来保存更改。

语法

下面给出了 COMMIT 命令的语法。

示例

查看 EMPLOYEES 表,其中包含记录。

ID姓名年龄地址工资
1Hamilton23澳大利亚34000
2Warner34英格兰22000
3Martin28中国25000
4Twinkle30土耳其50000
5Tinu32Nepal45000
6Michal31不丹20000
7哈珀20Bangladesh15000

以下命令示例将从 age = 30 的表中删除记录,然后在数据库中 COMMIT 更改。

在结果部分中,表中的第 4 行和第 6 行已被删除。SELECT 语句生成以下给出的输出

ID姓名年龄地址工资
1Hamilton23澳大利亚34000
2Warner34英格兰22000
3Martin28中国25000
5Tinu32Nepal45000
7哈珀20Bangladesh15000

ROLLBACK 命令

ROLLBACK 命令是用于撤消尚未保存到数据库的事务的事务命令。Rollback 命令用于 撤消 一组事务。

语法

示例

查看 EMPLOYEES 表,其中包含以下记录。

ID姓名年龄地址工资
1Hamilton23澳大利亚34000
2Warner34英格兰22000
3Martin28中国25000
4Twinkle30土耳其50000
5Tinu32Nepal45000
6Michal31不丹20000
7哈珀20Bangladesh15000

以下命令示例将从 age = 20 的表中删除记录,然后在数据库中 ROLLBACK 更改。

删除操作对表的结果没有影响。

ID姓名年龄地址工资
1Hamilton23澳大利亚34000
2Warner34英格兰22000
3Martin28中国25000
4Twinkle30土耳其50000
5Tinu32Nepal45000
6Michal31不丹20000
7哈珀20Bangladesh15000

SAVEPOINT 命令

SAVEPOINT 是事务中的一个点,当我们将事务回滚到某个点而无需回滚整个操作时。

语法

SAVEPOINT 命令的语法

该顺序用于在事务语句之间创建 SAVEPOINT。

SAVEPOINT 语法

在下面的示例中,我们从 EMPLOYEES 表中删除三个不同的记录。然后在每次删除之前创建一个 SAVEPOINT,以便我们可以在返回数据到其原始状态时加载 SAVEPOINT

示例

考虑具有以下记录的 EMPLOYEES 表 -

ID姓名年龄地址工资
1Hamilton23澳大利亚34000
2Warner34英格兰22000
3Martin28中国25000
4Twinkle30土耳其50000
5Tinu32Nepal45000
6Michal31不丹20000
7哈珀20Bangladesh15000

以下是一系列操作 -

Begin Tran

已创建保存点。

已删除 1 行。

已创建保存点。

已删除 1 行。

这些命令占据了他们的位置。

我们决定 ROLLBACK SAVEPOINT,它被识别为 SP2。 因为 SP2 是在 1 次删除之后创建的,所以 2 次最后一次删除尚未完成。

回滚已完成。

注意:当我们回滚到 SP2 时,第一次删除已经发生。

已选择 6 行。

ID姓名年龄地址工资
2Warner34英格兰22000
3Martin28中国25000
4Twinkle30土耳其50000
5Tinu32Nepal45000
6Michal31不丹20000
7哈珀20Bangladesh15000

SET TRANSACTION 命令

set transmission 命令将用于启动数据库事务。该命令用于生成事务的特性,如下所示

SET TRANSACTION 的语法

以下是 SET TRANSACTION 的语法。


下一主题T-SQL 索引