开发手册 欢迎您!
软件开发者资料库

T-SQL - 事务

T-SQL事务 - 从简单和简单的步骤学习T-SQL,从基本概念到高级概念,包括概述,数据类型,创建表,删除表,INSERT语句,SELECT语句,UPDATE语句,DELETE语句,WHERE子句,LIKE子句,ORDER BY子句,GROUP BY子句,DISTINCT子句,连接表,子查询,存储过程,事务,索引,函数,字符串函数,日期函数,数字函数。

事务是针对数据库执行的工作单元.事务是按逻辑顺序完成的单元或工作序列,无论是由用户手动还是由某种数据库程序自动完成.

事务是传播一个或多个对数据库的更多更改.例如,如果要创建记录或更新记录或从表中删除记录,则表示您正在对表执行事务.控制事务以确保数据完整性和处理数据库错误非常重要.

实际上,您将许多SQL查询添加到一个组中,并且您将作为一部分一起执行所有这些查询.交易.

交易属性

交易具有以下四种标准属性,通常用首字母缩略词ACID : 表示;

  • 原子性 : 确保工作单元内的所有操作都成功完成;否则,交易在失败时中止,之前的操作将回滚到以前的状态.

  • 一致性 :  ;确保数据库在成功提交的事务中正确更改状态.

  • 隔离 : 使交易能够独立运作并相互透明.

  • 耐久性 : 确保在系统出现故障时提交的事务的结果或效果仍然存在.

事务控制

以下命令用于控制交易 :

  • COMMIT : 保存更改.

  • ROLLBACK : 要回滚更改.

  • SAVEPOINT : 在ROLLBACK中的交易组内创建点.

  • SET TRANSACTION : 在事务上放置名称.

事务控制命令仅用于DML命令INSERT,UPDATE和DELETE.创建表或删除它们时不能使用它们,因为这些操作会自动在数据库中提交.

为了在MS SQL Server中使用事务控制命令,我们必须以''开始事务处理begin tran'或begin transaction命令,否则这些命令将不起作用.

COMMIT命令

COMMIT命令是用于保存调用的更改的事务命令通过事务到数据库.自上次COMMIT或ROLLBACK命令以来,此命令将所有事务保存到数据库.

语法

以下是COMMIT命令的语法.

  COMMIT;

示例

考虑具有以下记录的CUSTOMERS表.

ID  NAME       AGE       ADDRESS           SALARY 1   Ramesh     32        Ahmedabad         2000.00 2   Khilan     25        Delhi             1500.00 3   kaushik    23        Kota              2000.00 4   Chaitali   25        Mumbai            6500.00 5   Hardik     27        Bhopal            8500.00 6   Komal      22        MP                4500.00 7   Muffy      24        Indore            10000.00

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

Begin Tran DELETE FROM CUSTOMERS    WHERE AGE = 25 COMMIT

结果,表中的两行将被删除,SELECT语句将产生以下outpu t.

ID  NAME       AGE       ADDRESS           SALARY 1   Ramesh     32        Ahmedabad         2000.003   kaushik    23        Kota              2000.005   Hardik     27        Bhopal            8500.00 6   Komal      22        MP                4500.00 7   Muffy      24        Indore            10000.00

ROLLBACK命令

ROLLBACK命令是用于撤消尚未保存到数据库的事务的事务命令.自上次发出COMMIT或ROLLBACK命令以来,此命令只能用于撤消事务.

语法

以下是ROLLBACK命令的语法.

  ROLLBACK

示例

考虑具有以下记录的CUSTOMERS表.

ID  NAME       AGE       ADDRESS            SALARY 1   Ramesh     32        Ahmedabad          2000.00 2   Khilan     25        Delhi              1500.00 3   kaushik    23        Kota               2000.00 4   Chaitali   25        Mumbai             6500.00 5   Hardik     27        Bhopal             8500.00 6   Komal      22        MP                 4500.00 7   Muffy      24        Indore             10000.00

以下命令示例将删除年龄= 25的表中的记录,然后ROLLBACK数据库中的更改.

Begin Tran DELETE FROM CUSTOMERS    WHERE AGE = 25; ROLLBACK

因此,删除操作不会影响表,SELECT语句将产生以下结果.

ID  NAME       AGE       ADDRESS          SALARY 1   Ramesh     32        Ahmedabad        2000.00 2   Khilan     25        Delhi            1500.00 3   kaushik    23        Kota             2000.00 4   Chaitali   25        Mumbai           6500.00 5   Hardik     27        Bhopal           8500.00 6   Komal      22        MP               4500.00 7   Muffy      24        Indore           10000.00

SAVEPOINT命令

当您可以将事务回滚到某个点而不回滚整个事务时,SAVEPOINT是事务中的一个点.

语法

以下是SAVEPOINT命令的语法.

SAVE TRANSACTION SAVEPOINT_NAME

此命令仅用于在事务语句中创建SAVEPOINT. ROLLBACK命令用于撤消一组事务.

以下是回滚到SAVEPOINT的语法.

ROLLBACK TO SAVEPOINT_NAME

在下面的示例中,我们将从CUSTOMERS表中删除三个不同的记录.我们必须在每次删除之前创建一个SAVEPOINT,以便我们可以随时ROLLBACK到任何SAVEPOINT以将适当的数据返回到其原始状态.

示例

考虑CUSTOMERS表,其中包含以下记录 :

ID  NAME       AGE       ADDRESS          SALARY 1   Ramesh     32        Ahmedabad        2000.00 2   Khilan     25        Delhi            1500.00 3   kaushik    23        Kota             2000.00 4   Chaitali   25        Mumbai           6500.00 5   Hardik     27        Bhopal           8500.00 6   Komal      22        MP               4500.00 7   Muffy      24        Indore           10000.00

以下是一系列操作 :

Begin Tran SAVE Transaction SP1 Savepoint created. DELETE FROM CUSTOMERS WHERE ID = 1  1 row deleted. SAVE Transaction SP2 Savepoint created. DELETE FROM CUSTOMERS WHERE ID = 2 1 row deleted.SAVE Transaction SP3 Savepoint created. DELETE FROM CUSTOMERS WHERE ID = 3 1 row deleted.

三次删除已经发生,但是,我们已经改变主意并决定ROLLBACK到我们识别为SP2的SAVEPOINT.因为SP2是在第一次删除后创建的,所以最后两次删除是撤消 : 去;

ROLLBACK Transaction SP2 Rollback complete.

请注意,自从我们回滚到SP2以来,只发生了第一次删除.

  SELECT * FROM CUSTOMERS

选择6行.

ID  NAME       AGE       ADDRESS          SALARY 2   Khilan     25        Delhi        1500.00 3   kaushik    23        Kota             2000.00 4   Chaitali   25        Mumbai           6500.00 5   Hardik     27        Bhopal           8500.00 6   Komal      22        MP               4500.00 7   Muffy      24        Indore           10000.00

SET TRANSACTION命令

SET TRANSACTION命令可用于启动数据库事务.此命令用于指定后续事务的特征.

语法

以下是SET TRANSACTION的语法.

  SET TRANSACTION ISOLATION LEVEL< Isolationlevel_name>