数据库总结七事务

定义

事务(Transaction)是由对数据库的若干操作组成的一个单元,这些操作要么都完成,要么都取消(如果在操作执行过程中不能完成其中任一操作),从而保证数据修改的一致性,并且在系统出错时确保数据的可恢复性机制。

属性

原子性:对数据的修改,要么都完成,要么都取消。

一致性:事务完成时,保持数据的一致性、完整性。

隔离性:并行事务之间相互隔离。

持久性:事务完成后,对数据所做的所有修改就保存到数据库中。

特点

可保证操作的一致性和可恢复性

可由用户定义,它包括一系列的操作或语句

每一条T-SQL语句都可以是一个事务

在多服务器环境中,可定义分布式事务

事务的模式

三种:显式、隐式和自动提交事务

显式事务是明确地用begin transaction 语句定义事务开始、用commit rollback 语句定义事务结束的事务。

事务定义有事务开始和事务结束。事务开始可分为明显定义和不明显定义;事务结束也可分为明显定义和不明显定义。

set implicit_transactions

On: 前一个事务完成时自动启动新事务开始

Off:前一条语句完成时自动启动新事务开始

隐式事务是用set implicit_transactions on 不明显地定义事务开始,用 commit rollback 语句明显地定义事务结束的事务。

自动提交事务

    set implicit_transactions 设置为 off 时,设置在前一条语句完成时自动启动新事务开始。如果这条语句能够成功地执行,则提交该语句,否则自动回滚该语句的操作。即每条单独的T-SQL语句都是一个事务,这就是自动事务模式。自动提交事务是SQL Server默认的事务模式。

分布式事务是跨越两个或多个数据库的事务。

事务控制

    (1) 设置隐性事务开始模式:

set implicit_transactions on 启动隐性事务模式;

set implicit_transactions off 关闭隐性事务模式。

(2) 设置自动回滚模式:

set xact_abort on 当事务中任一条语句产生运行时错误,整个事务将终止并整体回滚;

set xact_abort off 当事务中语句产生运行时错误,将终止本条语句且只回滚本条语句。

事务控制语句

(1) begin transaction [事务名]

    明显定义事务开始

(2) commit transaction [事务名]/ commit [ work ]

  提交事务使事务对数据库的修改有效。

(3) rollback transaction [事务名] | [事务保存点]

      rollback [ work ]

  回滚事务使得事务对数据库的修改无效。

(4) save transaction (事务保存点)

   设置保存点,用于回滚部分事务。

(5) 事务控制语句的使用方法:

begin transaction

   ……          --  A组语句序列

save transaction 保存点1

 

   ……          --  B组语句序列

if @@error <> 0

   rollback transaction 保存点1   --回滚到保存点1

else

   commit transaction     

   --提交A组语句,同时如果未回滚B组语句则提交B组语句

事务中使用的全局变量

@@rowcount上一语句影响的行数;@@trancount当前连接的活动事务数

@@error检测或使用@@error时上一条语句执行时的错误代码。

@@error=0表示执行成功;

 

事务控制

 (1) 声明游标:declare 游标名 cursor for select语句;

(2) 打开游标:open 游标名;

(3) 处理数据:

l 移动当前行并读取数据:fetch 游标名 [into @变量名,…]

l 删除当前行数据:delete from 表或视图名 where current of 游标名

l 修改当前行数据:update from 表或视图名 set 列名=表达式,…

                    where current of 游标名

(4) 关闭游标:close 游标名;

(5) 释放游标:deallocate 游标名;

事务控制语句的使用方法

begin transaction   --  事务开始

   ……          --  A组语句序列

save transaction 保存点1    --定义保存点

   ……          --  B组语句序列

if @@error <> 0

   rollback transaction 保存点1   --回滚到保存点1

else

   commit transaction  --提交A组语句,同时如果未回滚B组语句则提交B组语句。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值