SQLServer事务和并发控制.pptx
上传人:王子****青蛙 上传时间:2024-09-10 格式:PPTX 页数:72 大小:256KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

SQLServer事务和并发控制.pptx

SQLServer事务和并发控制.pptx

预览

免费试读已结束,剩余 62 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

SQLServer第8章SQLServer事务和并发控制8.1事务8.1.1事务的概念1、事务的特性2、事务和批的区别8.1.2事务对并发控制和保障数据完整的重要性2.事务对保障数据一致和完整性的作用故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失。影响事务正常运行的故障有:(1)事务内部的故障(2)系统故障(3)介质故障(4)计算机病毒8.2事务的分类和控制8.2.1事务的分类2)隐式事务在隐式事务模式下,在当前事务提交或回滚后,SQLServer自动开始下一个事务。所以,隐式事务不需要使用BEGINTRANSACTION语句启动事务,而只需要用户使用ROLLBACKTRANSACTION、ROLLBACKWORK、COMMITTRANSACTION、COMMITWORK等语句提交或回滚事务。在提交或回滚后,SQLServer自动开始下一个事务。执行SETIMPLICIT_TRANSACTIONSON语句可使SQLServer进入隐式事务模式。在隐式事务模式下,当执行下面任意一个语句时,可使SQLServer重新启动一个事务:所有CREATE语句ALTERTABLE所有DROP语句TRUNCATETABLEGRANTREVOKEINSERTUPDATEDELETESELECTOPENFETCH需要关闭隐式事务模式时,调用SET语句关闭IMPLICIT_TRANSACTIONSOFF连接选项即可。3)自动事务模式在自动事务模式下,当一个语句被成功执行后,它被自动提交,而当它执行过程中产生错误时,被自动回滚。自动事务模式是SQLServer的默认事务管理模式,当与SQLServer建立连接后,直接进入自动事务模式,直到使用BEGINTRANSACTION语句开始一个显式事务,或者打开IMPLICIT_TRANSACTIONS连接选项进入隐式事务模式为止。而当显式事务被提交或IMPLICIT_TRANSACTIONS被关闭后,SQLServer又进入自动事务管理模式。示例:8.2.2事务控制说明:在定义一个事务时,BEGINTRANSACTION语句应与COMMITTRANSACTION语句或ROLLBACKTRANSACTION成对出现。在SQLServer中,事务定义语句可以嵌套,但实际上只有最外层的BEGINTRANSACTION语句和COMMITTRANSACTION语句才能建立和提交事务;在回滚事务时,也只能使用最外层定义的事务名或存储点标记,而不能使用内层定义的事务名。事务嵌套常用在存储过程或触发器内,它们可以使用BEGINTRANSACTION…COMMITTRANSACTION对来相互调用。8.3.1编写有效事务的指导原则8.3.2避免并发问题8.3.1编写有效事务的指导原则8.3.2避免并发问题8.4事务处理实例分析INSERTstudent(sno,sssn,sname,ssex,smtel,scity,smajor,sdepa)VALUES('S060101','******19880510***','关汉青','男','','西安','计算机','信息学院')--服务器:消息2627,级别14,状态1,行1--违反了PRIMARYKEY约束'PK__Student__75A278F5'。不能在对象'Student'中插入重复键。--语句已终止。SELECTtimes=2,*FROMstudent--显示数据没有变化。GOBEGINTRANSACTION--进入显式事务模式INSERTstudent(sno,sssn,sname,ssex,smtel,scity,smajor,sdepa)VALUES('S060106','******19880510***','关汉青','男','','西安','计算机','信息学院')SELECTtimes=3,*FROMstudent--显示'S060106'被插入ROLLBACKTRANSACTIONGOSELECTtimes=4,*FROMstudent--因为执行了回滚,插入的'S060106'被撤消。GOSETIMPLICIT_TRANSACTIONSON--进入隐式事务模式INSERTstudent(sno,sssn,sname,ssex,smtel,scity,smajor,sdepa)VALUES('S060107','******19880510***','关汉青','男','','西安','计算机','信息学院')SELECTtimes=5,*FROMstudent--显示'S060107'被插入ROLLBACKG