- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一章 事务和锁;事务的概念;事务和触发器他们有时候是功能是等同的,只是实现方式不同而已
触发器应该慎用,相对来说事务的执行效率要高,因为触发器是并发的,多条语句同时执行, 而事务中, 是一句一句执行的. 如果事务结束前.出现错误.那么整个事务就会回滚. 取消之前的所有操作. 触发器对于数据来说,也不便于维护。
用事务的话. 执行第一个正常,第二个出错.可以回滚.那么第一个执行正常的 也不会更新数据.
用触发器就不一样了. 第一个或者第二个执行正常与否,与另一条无关.
一般金融机构,多用户并发系统都采用事务来出来数据,更好的保证了数据的完整性和同一性。;银行转帐;假定张三的帐户直接转帐1000元到李四的帐户;;错误原因分析:;事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作
这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行
事务是一个不可分割的工作逻辑单元
转帐过程就是一个事务。
它需要两条UPDATE语句来完成,这两条语句是一个整体,如果其中任一条出现错误,则整个转帐业务也应取消,两个帐户中的余额应恢复到原来的数据,从而确保转帐前和转帐后的余额不变,即都是1001元。; 事务的四个特性(ACID);隔离性(Isolation):在事务完成前,它对数据库的修改对其它事务必定不可见。这表明事务是必须独立的,它不应以任何方式依赖于或影响其他事务。在并发数据操作时,不同的事务拥有各自数据空间,它们的操作不会对对方产生干扰。数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性越好,但并发性越弱。
持久性(Durabiliy) :事务的持久性意味着只有当事务提交以后,操作才会完成。如果系统相关事务刚刚完成后崩溃或重新启动,则必须保证对数据所做的修改不受其的影响。;事务控制;事务控制;事务的分类; 2显式事务:显式地定义其开始和结束的事务,这是最常用的事务类型
该类事务是用户自定义事务,是以
BEGIN TRANSACTION(事务开始)开头
以 COMMIT TRANSACTION(事务提交)
或者 ROLLBACK TRANSACTION(回滚事务)语句结束的
一旦事务提交或回滚,则事务结束。
判断某条语句执行是否出错:
使用全局变量@@ERROR和@@ROWCOUNT;
@@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计;
如: SET @errorSum=@errorSum+@@error
如:if @@error0 or @@rowcount1
rollback transaction; 3隐式事务;使用事务解决银行转帐问题;IF @errorSum0 --如果有错误
BEGIN
print 交易失败,回滚事务
ROLLBACK TRANSACTION
END
ELSE
BEGIN
print 交易成功,提交事务,写入硬盘,永久的保存
COMMIT TRANSACTION
END
GO
print 查看转帐事务后的余额
SELECT * FROM bank
GO
;演示:转帐1000,转帐失败的情况
;转帐800,转帐成功的情况:;事务的嵌套;--创建一个嵌套事务,在外层事务添加两条记录,在内层事务里添加一条记录
--查看事务执行之前的记录
select * from 产品
--开始事务
begin transaction
--插入两条记录
insert 产品(产品名称,类别ID) values(西瓜汁,1)
if @@error0 or @@rowcount1
goto TranRollBack
insert 产品(产品名称,类别ID) values(猕猴桃汁,1)
if @@error0 or @@rowcount1
goto TranRollBack
--查看在事务嵌套执行之前的记录情况
select * from 产品;--嵌套开始
begin tran
insert 产品(产品名称,类别ID) values(可乐,1)
if @@error0 or @@rowcount1
rollback tran
else
commit tran
--嵌套结束
--查看事务嵌套后的记录情况
select * from 产品
if @@error0
begin
TranRollBack:
rollback tran
end
else
commit tran
--查看所有事务完成后的情况
select * from 产品;事务执行之
您可能关注的文档
最近下载
- 22J403-1 楼梯 栏杆 栏板(一) (3).pdf VIP
- 口腔科门诊护士接诊流程ppt新版【16页】.pptx VIP
- 课件:土壤有机质的测定.ppt VIP
- 2025年蜀道投资集团有限责任公司招聘笔试备考试题及答案解析.docx VIP
- 材料与试验协会 E 3-2001金相试样的制备方法(中文版).pdf VIP
- 设备台账标准格式.xls VIP
- 动火作业施工方案模板.docx
- 玩家国度ROG STRIX Z790-E GAMING WIFI 主板 ROG STRIX Z790-E GAMING WIFI 简体中文版使用手册.pdf
- 2025年蜀道投资集团有限责任公司招聘笔试备考题库及一套答案详解.docx
- 2025年辅警招考时事政治考题及答案.docx VIP
文档评论(0)