收藏 分享(赏)

sqlserver11-事务及错误处理.ppt

上传人:无敌 文档编号:1108094 上传时间:2018-06-11 格式:PPT 页数:20 大小:785.52KB
下载 相关 举报
sqlserver11-事务及错误处理.ppt_第1页
第1页 / 共20页
sqlserver11-事务及错误处理.ppt_第2页
第2页 / 共20页
sqlserver11-事务及错误处理.ppt_第3页
第3页 / 共20页
sqlserver11-事务及错误处理.ppt_第4页
第4页 / 共20页
sqlserver11-事务及错误处理.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、第四部分 事务及错误处理,Computer Application - Fjnusoft University,2,目标,理解事务的概念掌握如何创建事务Sql server错误处理,Computer Application - Fjnusoft University,3,为什么需要事务5-1,银行转帐,例如,银行转帐问题: 假定资金从帐户A转到帐户B,至少需要两步:帐户A的资金减少然后帐户B的资金相应增加,帐户A,帐户B,Computer Application - Fjnusoft University,4,假定张三的帐户直接转帐1000元到李四的帐户,为什么需要事务5-2,CREATE T

2、ABLE bank( customerName CHAR(10), -顾客姓名 currentMoney MONEY CHECK(currentMoney=1) -当前余额)GOINSERT INTO bank(customerName,currentMoney) VALUES(张三,1000)INSERT INTO bank(customerName,currentMoney) VALUES(李四,1),创建帐户表,存放用户的帐户信息,添加约束:根据银行规定,帐户余额不能少于1元,否则视为销户,张三开户,开户金额为1000元 ;李四开户,开户金额1元,Computer Application

3、 - Fjnusoft University,5,为什么需要事务5-3,目前两个帐户的余额总和为:1000+1=1001元,Computer Application - Fjnusoft University,6,为什么需要事务5-4,模拟实现转帐 : 从张三的帐户转帐1000元到李四的帐户,/*-转帐测试:张三转账1000元给李四-*/-我们可能会这样这样编写语句-张三的帐户少1000元,李四的帐户多1000元UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=张三UPDATE bank SET currentM

4、oney=currentMoney+1000 WHERE customerName=李四GO-再次查看转帐后的结果。 SELECT * FROM bankGO,请问:执行转帐语句后,张三、李四的帐户余额为多少?,张三的帐户没有减少 但李四的帐户却多了1000元 100010012001元 总额多出了1000元!,Computer Application - Fjnusoft University,7,为什么需要事务5-5,-张三的帐户减少1000元,李四的帐户增加1000元UPDATE bank SET currentMoney=currentMoney-1000 WHERE customer

5、Name=张三UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四GO,错误原因分析:,UPDATE语句违反约束:余额=1元,执行失败,所以张三还是1000元,继续往下执行:执行成功,所以李四变为1001元,如何解决呢?使用事务,8,什么是事务,事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行 事务是一个不可分割的工作逻辑单元,转帐过程就是一个事务。它需要两条UPDATE语句来完成,这两条语句是一个整体,如果其中任一条出现错误,则整

6、个转帐业务也应取消,两个帐户中的余额应恢复到原来的数据,从而确保转帐前和转帐后的余额不变,即都是1001元。,Computer Application - Fjnusoft University,9,如何创建事务,T-SQL使用下列语句来管理事务:开始事务:BEGIN TRANSACTION提交事务:COMMIT TRANSACTION回滚(撤销)事务:ROLLBACK TRANSACTION一旦事务提交或回滚,则事务结束。判断某条语句执行是否出错:使用全局变量ERROR;ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计;

7、如: SET errorSum=errorSum+error,Computer Application - Fjnusoft University,10,如何创建事务,使用事务解决银行转帐问题,开始事务(指定事务从此处开始,后续的T-SQL语句都是一个整体),累计是否有错误,Computer Application - Fjnusoft University,11,如何创建事务,转帐事务前,转帐事务过程中,转帐事务结束后,演示:转帐1000,转帐失败的情况,Computer Application - Fjnusoft University,12,如何创建事务,转帐事务前,转帐事务过程中,转帐

8、事务结束后,演示:转帐800,转帐成功的情况,Computer Application - Fjnusoft University,13,如何创建事务,根据是否有错误,确定事务是提交还是撤销,如果有错,则回滚操作,事务结束,如果成功,则提交操作,事务结束,Computer Application - Fjnusoft University,14,如何创建事务,了解事务的分类:显示事务:用BEGIN TRANSACTION明确指定事务的开始,这是最常用的事务类型隐性事务:通过设置SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开,下一个语句自动启动一个新事务

9、。当该事务完成时,再下一个 T-SQL 语句又将启动一个新事务自动提交事务:这是 SQL Server 的默认模式,它将每条单独的 T-SQL 语句视为一个事务,如果成功执行,则自动提交;如果错误,则自动回滚,15,事务的特性,事务必须具备以下四个属性,简称ACID 属性:原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行一致性(Consistency):当事务完成时,数据必须处于一致状态隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务永久性(Dur

10、ability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性,T-sql异常处理机制总结,通过执行Transact-SQL而产生的错误可分为两种:致命错误(fatal error)和非致命错误(non-fatal error)。在Transact-SQL中只可以捕捉非致命错误(如键值冲突),而无法捕捉致命错误(如语法错误)。方法一:error在Transact-SQL中可以通过系统变量ERROR判断最近执行的一条语句是否成功执行。如果发生了错误,Error的值大于0,否则值为0。举例:假设有一个表table1,在这个表中有两个字段f1,f2。其中f1是主键。INSER

11、T INTO table1 VALUES(1, aa)INSERT INTO table1 VALUES(1, bb) -这条语句将产生一个错误IF ERROR 0PRINT 键值冲突,T-sql异常处理机制总结,通过执行Transact-SQL而产生的错误可分为两种:致命错误(fatal error)和非致命错误(non-fatal error)。在Transact-SQL中只可以捕捉非致命错误(如键值冲突),而无法捕捉致命错误(如语法错误)。方法一:begin try我们将可能会出错的sql 写在begin try.end try 之间,若出错,刚程序就跳到紧接着的begin try.en

12、d try 的beign catch.end catch中,执行beign catch.end catch错误处理SQL。举例:Begin tryINSERT INTO table1 VALUES(1, aa) INSERT INTO table1 VALUES(1, bb)End tryBegin catch PRINT 键值冲突End catch,错误函数,T-sql异常处理机制总结,抛出自定义错误信息,供前台try获取处理系统定义的错误,用户也可以自行定义错误,用人性化的提示语言描述错误,该消息作为服务器错误消息返回到调用应用程序,或返回到 TRYCATCH 构造的关联 CATCH 块。定义格式raiserror(错误提示语句,严重级别,状态)一般用户自定义11-19的严重级别,状态为1举例if(a 100)raiserror(a的值不能大于100,16,1) 抛出错误,Thank You,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报