T-SQL事务

T-SQL事务

Transaction(事务)是针对数据库执行的工作单元。任何读取或写入数据库的事务。

事务是一项或多项更改数据库的操作。

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

事务的特性:

T-SQL事务

事务具有四个属性,这些属性被称为ACID属性-

  • 原子性(Atomicity) – 确保工作单元的所有操作成功完成;否则,事务将在失败点被取消,并且最早的活动将移回到以前的位置。这意味着要么全部成功要么全部失败。
  • 一致性(Consistency) – 这确保了成功提交事务后,数据库正确地更改了状态。
  • 持久性(Durability) – 将数据库从一个一致的状态带到另一个稳态,确保将数据库从一个稳态传递到另一个稳态。
  • 隔离性(Isolation) – 隔离性确保一个事务与其他事务不同。这使得操作能够彼此透明地工作。
  • 稳定性(Stability) – 在系统故障的情况下,它确保提交的事务的结果或影响。稳定性意味着一旦完成事务,它就会在错误、断电等情况下保持不变。

事务控制

T-SQL事务

以下是用于控制事务的命令:

  • COMMIT(提交) – 用于保存更改。
  • ROLLBACK(回滚) – ROLLBACK用于撤消尚未保存到数据库的事务。Rollback命令用于撤消一组操作。
  • SAVEPOINT(保存点) – SAVEPOINT通过rollback命令创建事务组。
  • SET TRANSACTION(设置传输) – 返回事务的名称。

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

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

COMMIT命令

它也称为Transactional Command(事务命令)。数据库使用该命令保存更改。

语法:

下面是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

以下命令示例将从具有AGE = 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

假设我们想要删除具有ID = 3和ID = 7的两个记录。

在初始状态下,使用以下命令开始事务。

BEGIN TRANSACTION;

现在,执行以下语句删除具有ID = 3和ID = 7的两个记录。

DELETE FROM EMPLOYEES WHERE ID IN (3,7);

现在,使用ROLLBACK命令撤消该事务,如下所示。

ROLLBACK;

现在,选择从表中查看所有记录,我们可以看到ID = 3和ID = 7的两行仍存在,并且未从数据库中删除。

SAVEPOINT命令

SAVEPOINT命令通过rollback命令创建事务组。它用于将一个事务分成多个可回滚的部分。

语法:

下面是SAVEPOINT命令的语法。

SAVEPOINT SAVEPOINT_NAME;

例子

请参阅以下记录的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

假设我们要删除具有ID = 3和ID = 7的两条记录,并使用SAVEPOINT将事务拆分为可回滚的部分。

首先,执行BEGIN TRANSACTION语句开始事务。

BEGIN TRANSACTION;

接下来,执行以下命令,从表中删除ID为3的记录。

DELETE FROM EMPLOYEES WHERE ID = 3;

现在,我们使用SAVEPOINT命令创建名为’SP1’的保存点。

SAVEPOINT SP1;

接下来,执行以下语句,从表中删除ID为7的记录。

DELETE FROM EMPLOYEES WHERE ID = 7;

如果我们想要回滚到SAVEPOINT名为SP1的状态,则可以使用以下rollback命令。

ROLLBACK TO SP1;

这会撤消DELETE语句的效果,因此表将只包含具有ID = 3、ID = 4和ID = 5的三个记录。

现在,执行COMMIT或ROLLBACK语句来提交或回滚事务。例如,执行COMMIT语句以永久删除表的ID=3和ID=7行。

COMMIT;

SET TRANSACTION命令

SET TRANSACTION命令用于返回事务的名称。它允许我们指定一个表示事务的名称。

语法:

下面是SET TRANSACTION命令的语法。

SET TRANSACTION ISOLATION LEVEL <level_name>

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程