访问数据库时如何解决并发问题.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
访问数据库时如何解决并发问题

访问数据库时如何解决并发问题1(转) 在数据库访问时。如果处理并发访问的问题 或者当一个操作员对一个对象作读操作时。另一个操作员对此对象作写操作的时候 如何避免死锁发生 /**********??? 加锁???? *************** 设table1(A,B,C) A????? B????? C a1???? b1???? c1 a2???? b2???? c2 a3???? b3???? c3 1)排它锁 新建两个连接 在第一个连接中执行以下语句 begin tran ???update table1 ???set A=aa ???where B=b2 ???waitfor delay 00:00:30??--等待30秒 commit tran 在第二个连接中执行以下语句 begin tran ???select * from table1 ???where B=b2 commit tran 若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒 2)共享锁 在第一个连接中执行以下语句 begin tran ???select * from table1 holdlock -holdlock人为加锁 ???where B=b2 ???waitfor delay 00:00:30??--等待30秒 commit tran 在第二个连接中执行以下语句 begin tran ???select A,C from table1 ???where B=b2 ???update table1 ???set A=aa ???where B=b2 commit tran 若同时执行上述两个语句,则第二个连接中的select查询可以执行 而update必须等待第一个连接中的共享锁结束后才能执行 即要等待30秒 3)死锁 增设table2(D,E) D????? E d1???? e1 d2???? e2 在第一个连接中执行以下语句 begin tran ???update table1 ???set A=aa ???where B=b2 ???waitfor??? delay 00:00:30 ???update table2 ???set D=d5 ???where E=e1 commit tran 在第二个连接中执行以下语句 begin tran ???update table2 ???set D=d5 ???where E=e1 ???waitfor??? delay 00:00:10 ???update table1 ???set A=aa ???where B=b2 commit tran 同时执行,系统会检测出死锁,并中止进程 -------------------------------------------------------------- SET IMPLICIT_TRANSACTIONS??? ON --用户每次必须显式提交或回滚。否则当用户断开连接时, ??????????????????????????????? --事务及其所包含的所有数据更改将回滚 SET IMPLICIT_TRANSACTIONS??? OFF --自动提交模式。在自动提交模式下,如果各个语句成功 ???????????????????????????????? --完成则提交。 1:如上 2: 如何锁一个表的某一行 A 连接中执行 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ begin tran select * from tablename with (rowlock) where id=3 waitfor delay 00:00:05 commit tran B连接中如果执行 update tablename set colname=10 where id=3 --则要等待5秒 update tablename set colname=10 where id3 --可立即执行 2 锁定数据库的一个表 SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除 SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除 SELECT 语句中“加锁选项”的功能说明 ??? SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能。用户既能使用SQL Server的缺省设置也可以在

文档评论(0)

kaiss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档