CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

怎样给数据库加锁?用什么语句,使得在同一时刻只有我先进入的程序可以修改某张表

楼主sammihi2me(战星星)2003-08-03 09:47:14 在 MS-SQL Server / 基础类 提问

查了一下手头的SQLServer的书,好像只有讲述锁的概念,没有将具体怎么加锁,困惑 问题点数:20、回复次数:1Top

1 楼pengdali()回复于 2003-08-03 11:03:49 得分 20

设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  
   
  同时执行,系统会检测出死锁,并中止进程Top

相关问题

  • INFORMIX数据库如何给表加锁?
  • 怎么样给数据库的表加锁、解锁。
  • 关于用SQL语句动态的创建数据库和数据库表????
  • 请问怎样根据visio 数据库图表生成 数据库 ddl语句。
  • 通过SQL语句查看数据库中所有表名
  • 如何在PB用ALTER语句改变数据库表结构?
  • 用sql语句如何设置数据库表的默认值?
  • 求获取数据库中用户表的SQL语句
  • 急!oracle中用什么语句修改数据库表名!
  • 如何更改数据库表名称在MSSQLServer中用语句

关键词

  • 语句
  • 执行
  • 连接
  • 加锁
  • tran
  • 等待30秒
  • 以下语句begin
  • commit
  • update
  • where

得分解答快速导航

  • 帖主:sammihi2me
  • pengdali

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo