T-SQL事务

精华
小牛编辑
160浏览
2023-03-14

事务是与数据库相反执行的工作单元,从数据库读取或写入数据库的任何事务。事务是对数据库的一项或多项更改的传播。

例如,如果我们创建记录、更新或删除表的历史记录,那么也应该创建事务。控制数据完整性的操作是必不可少的,它用于处理数据库的错误。我们向组中添加一些 SQL 查询并执行事务部分。

事务属性:

  • 事务有四个属性,称为 ACID 属性 -

  • 原子性 - 确保与工作单元的所有操作都成功完成; 否则,事务在失败点被取消,最早的活动被移回之前的位置。这意味着要么全部成功,要么没有。

  • 一致性 - 这确保数据库在成功提交的事务上正确更改状态。
  • 兼容性 - 将数据库从一种一致状态带到另一种稳定状态可确保将数据库从一种稳定状态转移到另一种恒定状态。
  • 隔离性 - 隔离确保一个事务与其他事务不同。这使操作能够彼此透明地工作。
  • 稳定性 - 这可确保在系统故障的情况下已提交事务的结果或影响。稳定性是指一旦交易完成,在出现错误、断电等情况下仍能保持。

事物控制

事物控制

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

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

事务性命令在 DML 命令(例如 INSERT、UPDATE 和 DELETE)的帮助下使用。当我们创建或删除表时不能应用它。

在 MS SQL Server 中,要使用事务控制命令,我们启动“trans start”或事务命令; 否则该命令可能不起作用。

COMMIT命令

它也称为事务命令。数据库使用该命令来保存更改。COMMIT 命令的语法如下所示 -

COMMIT;

例子

假设 EMPLOYEES 表有以下记录 -

ID    NAME    AGE    ADDRESS    SALARY
1    Hamilton    23    Australia    34000
2    Warner    34    England    22000
3    Martin    28    China    25000
4    Twinkle    30    Turkey    50000
5    Tinu    32    Nepal    45000
6    Michal    31    Bhutan    20000
7    Harper    20    Bangladesh    15000

以下命令示例将从表中删除年龄 = 30 的记录,然后提交数据库中的更改。

Begin Tran   
DELETE FROM EMPLOYEES   
 WHERE AGE = 30   
COMMIT

在结果部分,表中的第 4 行和第 6 行已被删除。SELECT 语句查询结果如下输出:

ID    NAME    AGE    ADDRESS    SALARY
1    Hamilton    23    Australia    34000
2    Warner    34    England    22000
3    Martin    28    China    25000
5    Tinu    32    Nepal    45000
7    Harper    20    Bangladesh    15000

ROLLBACK命令

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

语法:

ROLLBACK

例子

假设 EMPLOYEES 表中包含以下记录 -

ID    NAME    AGE    ADDRESS    SALARY
1    Hamilton    23    Australia    34000
2    Warner    34    England    22000
3    Martin    28    China    25000
4    Twinkle    30    Turkey    50000
5    Tinu    32    Nepal    45000
6    Michal    31    Bhutan    20000
7    Harper    20    Bangladesh    15000

以下命令示例将从表中删除年龄 = 20 的记录,然后回滚数据库中的更改。

Begin Tran   
DELETE FROM EMPLOYEES   
WHERE AGE = 20;   
ROLLBACK

删除操作对表的结果没有影响,表中的记录如下所示 -

ID    NAME    AGE    ADDRESS    SALARY
1    Hamilton    23    Australia    34000
2    Warner    34    England    22000
3    Martin    28    China    25000
4    Twinkle    30    Turkey    50000
5    Tinu    32    Nepal    45000
6    Michal    31    Bhutan    20000
7    Harper    20    Bangladesh    15000

SAVEPOINT命令

SAVEPOINT 是事务中当将事务回滚到某个点而不滚动整个操作时的点。

SAVEPOINT 命令的语法:

SAVE TRANSACTION SAVEPOINT_NAME

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

SAVEPOINT 语法:

ROLLBACK TO SAVEPOINT_NAME

在下面的示例中,我们从 EMPLOYEES 表中删除了三个不同的记录。然后在每次删除之前创建一个SAVEPOINT,这样就可以在当时加载SAVEPOINT,将数据恢复到原来的状态。

例子:

假设 EMPLOYEES 表有以下记录 -

ID    NAME    AGE    ADDRESS    SALARY
1    Hamilton    23    Australia    34000
2    Warner    34    England    22000
3    Martin    28    China    25000
4    Twinkle    30    Turkey    50000
5    Tinu    32    Nepal    45000
6    Michal    31    Bhutan    20000
7    Harper    20    Bangladesh    15000

以下是一系列操作 —

SAVE Transaction SP1

保存点已创建。

DELETE FROM EMPLOYEES WHERE ID = 1

已删除 1 行。

SAVE Transaction SP2

保存点已创建。

DELETE FROM EMPLOYEES WHERE ID = 2

已删除 1 行。

这些命令取代了它们的位置。我们决定回滚被识别为 SP2 的 SAVEPOINT。因为SP2是在1次删除后创建的,最后2次删除还没有完成。

ROLLBACK Transaction SP2

回滚已完成。

注意:当回滚到 SP2 时,已经进行了第一次删除。

下面查询 EMPLOYEE 表中的记录 -

SELECT * FROM EMPLOYEES

查询结果如下 -

ID    NAME    AGE    ADDRESS    SALARY
2    Warner    34    England    22000
3    Martin    28    China    25000
4    Twinkle    30    Turkey    50000
5    Tinu    32    Nepal    45000
6    Michal    31    Bhutan    20000
7    Harper    20    Bangladesh    15000

SET TRANSACTION命令

设置传输命令将用于启动数据库事务。该命令用于生成交易的特征。下面是 SET TRANSACTION 的语法 -

SET TRANSACTION ISOLATION LEVEL <level_name>