大型数据库技术复习 —— 事务控制

简介

  • 事务是一个用户定义的完整的工作单元,一个事务内的所有语句被作为整体执行,要么全部执行,要么全部不执行。遇到错误时,可以回滚事务,取消事务内所做的所有改变,从而保证数据库中数据的一致性和可恢复性。

事务的特性

  • 原子性:事务是数据库的逻辑工作单位,事务中的操作要么都做,要么都不做。
  • 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
  • 隔离性:一事务的执行不能被其它事务干扰。
  • 持续性(永久性):指事务一旦提交,则其对数据库中数据的改变就应该是永久的

事务和批的区别

  • 批是一组整体编译的SQL语句,事务是一组作为单个逻辑工作单元执行的SQL语句。
  • 批语句的组合发生在编译时刻,事务中语句的组合发生在执行时刻。
  • 当在编译时,批中某个语句存在语法错误,系统将取消整个批中所有语句执行,而在运行时刻,如果事务中某个数据修改违反约束、规则等,系统默认只回退产生该错误的语句。

显式事务

  • 显式事务是指由用户执行T-SQL事务语句而定义的事务。
  • BEGIN TRANSACTION:标识一个事务的开始,即启动事务。
  • COMMIT TRANSACTION、COMMIT WORK:标识一个事务的结束,事务内所修改的数据被永久保存到数据库中。
  • ROLLBACK TRANSACTION、ROLLBACK WORK:标识一个事务的结束,说明事务执行过程中遇到错误,事务内所修改的数据被回滚到事务执行前的状态。

隐式事务

  • 在隐式事务模式下,在当前事务提交或回滚后,SQL Server自动开始下一个事务。
  • 执行SET IMPLICIT_TRANSACTIONS ON语句可使SQL Server进入隐式事务模式。
  • 需要关闭隐式事务模式时,调用SET IMPLICIT_TRANSACTIONS OFF语句关闭。

自动事务

  • 在自动事务模式下,当一个语句被成功执行后,它被自动提交,而当它执行过程中产生错误时,被自动回滚。
  • 自动事务模式是SQL Server的默认事务管理模式。

事务错误处理

  • 使用 @@error 全局变量
USE 教学管理
GO
DECLARE @del_error int, @ins_error int
-- 开始一个事务
BEGIN TRAN
-- 删除一个学生
DELETE 学生表  WHERE 学号 = 'S060308'
-- 为删除语句设置一个接受错误数值的变量
SELECT @del_error = @@ERROR 
--再执行插入语句
INSERT INTO 学生表 
VALUES('S060308','******19890526***','张丹宁','男',
'130***12','宁波','电子商务','信息学院', 162)
--为插入语句设置一个接受错误数值的变量
SELECT @ins_error = @@ERROR
--测试错误变量中的值
IF @del_error = 0 AND @ins_error = 0
   BEGIN
       --成功,提交事务
       COMMIT TRAN
   END
ELSE
   BEGIN
       -- 有错误发生,回滚事务 
     IF @del_error <> 0 
        PRINT '错误发生在删除语句' 
     IF @ins_error <> 0
        PRINT '错误发生在插入语句' 
     ROLLBACK TRAN
   END 
GO
  • 使用 TRY...CATCH
BEGIN TRY
BEGIN TRANSACTION
……
COMMIT TRANSACTION
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
END CATCH
  • 使用 SET XACT_ABORT ON
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tanleiDD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值