什么是事务

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
update bank set 当前存款余额=当前存款余额-10000 where 客户名='曹操'
update bank set 当前存款余额=当前存款余额+10000 where 客户名='刘备'
select * from bank
曹操的余额没有减少,但刘备的余额却增加了10000,为什么?
应用事务处理转账的问题
课堂练习
1、创建一个事务,把学号为201710102的籍贯“广东湛江”改为“广 东东莞”、 201710103 的籍贯“广东深圳”改为“广东珠海” ,以上 两个操作任意一个操作失败,事务回滚,查看事务执行结果。
2、创建一个事务,把学号为201710102的籍贯“广东湛江”改为“广东 东莞”、 201710103 的籍贯“广东深圳”改为“广东珠海” ,以上两个 操作任意一个操作失败,事务回滚,查看事务执行结果,第一个操作失 败,事务回滚,成功则设定为保存点,第二个操作失败,则事务回滚, 查看事务执行结果。
总结
事务是一系列要么全部完成,要么什么都不做的逻辑工作单元。 事务作为一个重要的数据库技术基本概念,在保护数据库的可恢复 性的多用户、多事务方面具有基础性的作用。一个事务就是一个单 元的工作,该事务可能包括一条语句,也可能包括一百条语句,而 这些语句的所有操作,要么都完成,要么都取消。在数据库备份和 恢复过程中,事务也具有重要的作用,可以利用事务日志进行事务 日志的备份、增量备份,而不必每一次都执行耗费时间、精力和备 份介质的完全备份。
declare @tt char(10) exec pr_ddd 10,@tt output select @tt
案例:银行转账
create table bank ( 客户名 char(10), 当前存款余额 money check(当前存款余额>=1) )
insert into bank(客户名,当前存款余额) values('曹操',10000) insert into bank(客户名,当前存款余额) values( '刘备',1)
事务
定义
事务是作为单个逻辑单元执行的一系列操作,它是一个不可分割的 工作逻辑单元。它包含了一组数据库操作命令,这组命令要么全部执行, 要么全部不执行。 举个例子,我们经常用到的 ATM 存取款机,比如转账的时候,是先减去 转出账户的金额,然后再在指定转入账户的金额加上转出的金额。如果 刚好这个时候转出的操作已经执行完成,但是由于系统的故障,导致转 入的操作失败了。那么怎么办?这就需要用到事务了,只要事务里面有 一条命令未成功执行,那么数据就会回滚到事务开始之前的状态。
输出:删除不成功,如果能删除,则输出:删除成功。
create proc pr_ddd @id int, @mm char(10) output as begin declare @error int delete from bumen where bm_id=@id set @error=@error+@@ERROR if @error>0 begin set @mm='成功' end else begin set @mm='不成功' end end
begin transaction declare @error int set @error=0 update bank set 当前存款余额=当前存款余额-7000 where 客户名='曹操' set @error=@error+@@error update bank set 当前存款余额=当前存款余额+7000 where 客户名='刘备' set @error=@error+@@error if @error!=0 begin rollback transaction print '转账不成功' end else begin commit transaction print '转账成功' end
特性
(1) 原子性(Atomicity):事务是一个完整的操作, 事务中所有操作命令 必须作为一个整体提交或回滚。如果事务中任何操作命令失败,则整个 事务将因失败而回滚。 (2) 一致性(Consistency):当事务完成时,数据都处于一致状态。 (3) 隔离性(Isolation): 对数据进行修改的所有并发事务是彼此隔离的, 它不以任何方式依赖或影响其他事务。 (4) 持久性(Durability):事务提交之后,数据是永久性的,不可再回滚。
@@ERROR的使用
@@ERROR:当前一个语句遇到错误,则返回错误号,否则返回0。需要注意的 是@ @ ERROR在每一条语句执行后会被立刻重置,因此应该在要验证的语句 执行后检查数值或者是将它保存到局部变量中以备将来使用。
例题:创建一个存储过程,输入bm_id,删除该行记录的功能,如果无法删除,
操作
(1) begin transaction:开始事务。 (2) commit transaction:提交事务。 (3) rollback transaction:回滚事务。 (4) save transaction:事务保存点。即事务回滚时,可以指定 回滚到保 transaction 明确指定事务的开始,由 commit transaction 提交事务、rollback transaction 回滚事务到事务结束。 (2) 隐式事务:通过设置 set implicit_transactions on 语句,将隐式事务模式 设置为打开。当以隐式事务模式操作时,不必使用 begin transaction 开启事 务,当一个事务结束后,这个模式会自动启用下一个事务,只需使用 commit transaction 提交事务或 Rollback Transaction 回滚事务即可。 (3) 自动提交事务: 这是 SQL Server 的默认模式,它将每条单独的 T-SQL 语 句视为一个事务。如果成功执行,则自动提交。如果错误,则自动回滚。
相关文档
最新文档