SQLSERVER课件-事务与锁

SQLSERVER课件-事务与锁

ID:45077186

大小:310.00 KB

页数:20页

时间:2019-11-09

SQLSERVER课件-事务与锁_第1页
SQLSERVER课件-事务与锁_第2页
SQLSERVER课件-事务与锁_第3页
SQLSERVER课件-事务与锁_第4页
SQLSERVER课件-事务与锁_第5页
资源描述:

《SQLSERVER课件-事务与锁》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、事务和锁课程目标创建事务提交事务回滚事务回滚事务的一部分用锁解决潜在问题SQLServer锁设置锁选项事务例:要进行货物调拨,把指定仓库中的一定数量的商品调拨到另一个仓库中。问:(如何确保这个操作一定可以一起完成)设置多个操作必须全部执行成功,否则立即恢复到未执行任何操作时的状态是一个逻辑工作单元,单元中包含一批操作具有ACID四个性质原子性:不可只完成部分操作一致性:在处理成功后,所有数据都保持一致状态独立性:禁止其它事务看到本事务的中间状态持久性:一个已完成的事务对数据所作的任何变动在系统中是永久有效的自定义事务BeginTransaction

2、[事务名]执行自定义事务CommitTransaction[事务名]如果全部成功,提交事务SaveTransaction保存点名顾名思义,定义事务的某个执行位置RollbackTransaction[保存点名]回滚事务到事务的保存点位置注:1、如果回滚到保存点,并不提交事务2、@@trancount存储当前的事务数量自定义事务的实现方式Rollback问:如有下列操作系列,结果会如何begintransactionupdatestudentsetcphone=‘12345678’wheresid=‘A00001’updatestudentsetcn

3、ame=‘aaa’wheresid=‘A00001’rollbacktransactionRollback例:如果在调拨过程中要求记载下来调拨信息,若发现被调货的仓库的库存不够,则整个操作全部取消事务类型显示事务:由用户指定事务的开始和结束自动事务:每个语句视为一个事务隐式事务:开始执行语句就视为一个事务的开始,但语句执行完后,事务并不结束(由用户显示提交)setimplicit_transactions{on

4、off}数据并行问题所谓数据并行的问题就是指当数据同时进行事务处理时所发生的问题。数据并行问题1、遗失更新:当两个或多个事务试图修改同一行

5、时,事务队列中最后的更新会重写前面事务所作的修改资源A=100事务A事务BreadAreadAupdateA+50writeAupdateA+10writeA数据并行问题2、无效读入:一个事务读取了尚未认可的更新数据资源A=100事务A事务BreadAupdateA+50readAwriteAupdateA+10rollbackwriteA数据并行问题3、不一致分析:指事务连续两次读取数据时,所得到的数据不一致资源A=100事务A事务BreadAupdateA+50readAupdateA+10readAwriteA数据并行问题4、幻象读取:读取到

6、了并不存在的数据资源A=100事务A事务BreadAupdateA+50createBreadAreadBdelBupdateB+80writeB锁并行问题的解决方法:锁在功能上避免用户访问正在被其它用户改变的信息,在多用户环境中,避免一些用户同时改变同样的数据SQLServer使用锁来维护多用户环境下的数据的一致性,SQLServer自动处理锁的行为锁Server实现了多粒度上锁,允许事务以不同级别对不同类型的资源上锁行级页级范围表级共享锁定(S):常用于读事务,允许一个资源上有多个共享锁定,防止其它事务修改资源排它锁定(X):用于写事务,一个资

7、源上只能有一个排它锁定,防止并发事务对资源进行访问更新锁定(U):用于防止死锁,一个资源上只能有一个更新锁定,且只有获得更新锁定的事务才能获得排它锁定意向锁定(I):让事务声明它将在资源上使用共享、独占、更新锁定模式锁定(S):1、结构模式修改锁定2、结构描述固定锁定锁定模式例:用户A用户BBegintransactionbegintransactionupdatestudentupdateclasssetcclassid=‘c0002’setiperson=iperson+1select*fromclasswherecclassid=‘c0001

8、’Committransactionselect*fromstudentcommittransaction若这两个事务共时提交会产生什么情况分析死锁StudentClassTRANSACTIONATRANSACTIONB死锁:是两个用户分别锁定了不同的对象,且又试图访问另一个用户锁定对象时产生的理解锁当产生死锁时,SQL-Server会终止占用最少CPU时间的进程,终止的事务会自动回滚,并给出一个1205的错误SQLServer提供SETDEADLOCK_PRIORITY命令来定制死锁语法SETDEADLOCK_PRIORITY{LOW

9、NORMA

10、L

11、@deadlock_var}定制LOCK_TIMEOUTSETLOCK_TIMEOUT命令可被用来设置等待被阻塞资源语

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。