社区
MS-SQL Server
帖子详情
###如何设置对表的独占操作,以及如何获取表是否被独占的状态?###
nik_Amis
2008-03-12 05:39:48
有数据表A,用户X在SELECT ,UPDATE等 A的记录之前,设置对A的独占方式打开,此时任何其他用户在对这张表访问之前会先询问是否已经被独占打开,若独占打开则不能作任何操作,X操作结束之后取消独占,其他用户才可以访问此表
1。设置独占打开一张表
2。获取表的状态
请问各位高手,SQL 里面是否有这样的语句?
...全文
339
42
打赏
收藏
###如何设置对表的独占操作,以及如何获取表是否被独占的状态?###
有数据表A,用户X在SELECT ,UPDATE等 A的记录之前,设置对A的独占方式打开,此时任何其他用户在对这张表访问之前会先询问是否已经被独占打开,若独占打开则不能作任何操作,X操作结束之后取消独占,其他用户才可以访问此表 1。设置独占打开一张表 2。获取表的状态 请问各位高手,SQL 里面是否有这样的语句?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
42 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hui_hui_2007
2008-04-07
打赏
举报
回复
关注
nik_Amis
2008-04-07
打赏
举报
回复
up
nik_Amis
2008-03-18
打赏
举报
回复
up
rouqu
2008-03-13
打赏
举报
回复
[Quote=引用 27 楼 nik_Amis 的回复:]
我的需求是这样的:
A用户每天要对表P做查询更新插入数次,数据量每次最少2000条,最多可能10万
在更新期间不允许其他任何用户访问该表
大家看看,除了我上面的解决方案还有别的什么好的办法么?
[/Quote]
按照系统设计 表P做更新插入期间 其他用户可以访问表未被更新的记录行 为什么你不让访问呢?
rouqu
2008-03-13
打赏
举报
回复
你用条件判断应该说效果有限 因为你去判断什么级别(TAB、PAG、RID)上的什么锁(S/IS/U/IX/X)呢?
判断TAB意义不大(TAB为X的情况很少 大多数IX/S 你判断之后怎么操作?) 判断PAG也是(你怎么得到当前要更新的表范围对应的PAG并和当前锁定的PAG做比较)
如果你判断通过 系统可能还会判断一遍 如果你判断不通过 实际上可能无并发问题
rouqu
2008-03-13
打赏
举报
回复
Method I
set transaction isolation level serialiable
begin tran
select * from tableP
insert/update...
commit tran
set选项设置对当前连接所有SELECT一直启效 在查询更新插入操作完成之前 表被锁定(Select之后S锁不释放)
nik_Amis
2008-03-13
打赏
举报
回复
我的需求是这样的:
A用户每天要对表P做查询更新插入数次,数据量每次最少2000条,最多可能10万
在更新期间不允许其他任何用户访问该表
大家看看,除了我上面的解决方案还有别的什么好的办法么?
nik_Amis
2008-03-13
打赏
举报
回复
为啥意义不大?
rouqu
2008-03-13
打赏
举报
回复
BOL中不是有Result Sets嘛 LZ 不是我说 你这个程序做出来了意义也不大
netcup
2008-03-13
打赏
举报
回复
[Quote=引用 15 楼 happyflystone 的回复:]
11楼来解释 呀
[/Quote]
就是update table set pkid=pkid where pkid=@id
这样也可以起到锁表的作用。
rouqu
2008-03-13
打赏
举报
回复
[Quote=引用 21 楼 nik_Amis 的回复:]
有没有办法不用SP_LOCK取得锁定表?
这玩意儿,没法加查询条件,要在程序里面逐条判断,很不爽的
[/Quote]
insert into ... exec sp_lock
nik_Amis
2008-03-13
打赏
举报
回复
没人知道?
nik_Amis
2008-03-13
打赏
举报
回复
有没有办法不用SP_LOCK取得锁定表?
这玩意儿,没法加查询条件,要在程序里面逐条判断,很不爽的
ojuju10
2008-03-13
打赏
举报
回复
对表进行锁定
nik_Amis
2008-03-13
打赏
举报
回复
[Quote=引用 34 楼 rouqu 的回复:]
引用 32 楼 tongki_8 的回复:
楼主想法有问题
没错 LZ似乎认为数据库就应该在单用户状态下使用
[/Quote]
晕倒。。。
rouqu
2008-03-13
打赏
举报
回复
11F的方法是另外建立一张表 专门维护已被锁定表的状况吗?
yanjinbin01
2008-03-13
打赏
举报
回复
To :34楼
这种想法没什么问题,有时候你也会遇到 需要阻塞其他操作,让他们排队 而不是并发.(丢失性能是一定的但要的就是这效果.)
yanjinbin01
2008-03-13
打赏
举报
回复
维护数据完整行.
从你的需求来说
1.事务解决不可靠的(事务是行级锁定,对你这根本不使用)
2.12楼做标记方法,是可以的(用存储过程实现,一条sql语句实现不了,标记用全局变量@@xxx)
-- 并发问题,这里要自己定义一个循环+标记 来阻塞,等上次操作完下面的操作才能开发.
3.锁定表也是可行的(存储过程实现,一条sql语句实现不了.lock table unlock table )
总的来说这个.
-- 这个没问题,在mysql(sql server里面我不太清楚)里面锁定表后 并发操作会自动等前面解锁后在操作.
rouqu
2008-03-13
打赏
举报
回复
[Quote=引用 32 楼 tongki_8 的回复:]
楼主想法有问题
[/Quote]
没错 LZ似乎认为数据库就应该在单用户状态下使用
rouqu
2008-03-13
打赏
举报
回复
update/insert进行过程中 对应记录S锁不能加 也即是处于pengding的状态
加载更多回复(22)
oracle模式和
表
,Oracle 的锁
表
机制--EXCLUSIVE&SHAVE(共享和
独占
模式)
1、共享方式的
表
封锁 共享方式的
表
封锁是对
表
中的所有数据进行封锁,该锁用于保护查询数据的一致性,防止其它用户对已封锁的
表
进行更新。其它用户只能对该
表
再施加共享方式的锁,而不能再对该
表
施加
独占
方式的封锁,共享更新锁可以再施加,但不允许持有共享更新封锁的进程做更新。共享该
表
的所有用户只能查询
表
中的数据,但不能更新。共享方式的
表
封锁只能由用户用SQL语句来
设置
,基语句格式如下: LO...
oracle
独占
更新,Oracle的共享封锁
独占
封锁和共享更新封锁 (3)
一旦用户对某个行施加了行级封锁,则该用户可以查询也可以更新被封锁的数据行,其它用户只能查询但不能更新被封锁的数据行.如果其它用户想更新该
表
中的数据行,则也必须对该
表
施加行级锁.即使多个用户对一个
表
均使用了共享更新,但也不允许两个事务同时对一个
表
进行更新,真正对
表
进行更新时,是以
独占
方式封锁
表
,一直到提交或复原该事务为止。行锁永远是
独占
方式锁。当出现如下之一的条件,便释放共享更新锁:(1)、执行提交...
Hive的
表
操作
Hive的
表
操作
【MySQL】 ---- 共享锁、
独占
锁、行锁、
表
锁
共享锁、
独占
锁、行锁、
表
锁
Mysql
表
级锁的锁模式、并发插入
mysql
表
级锁的锁模式 两种
表
级锁模式:
表
共享读锁和
表
独占
写锁 1 对MyISAM
表
的读
操作
(加读锁),不阻塞其他进程对同一
表
的读请求,但会阻塞对同一
表
的写请求。 2 对MyISAM
表
的写
操作
(加写锁),会阻塞其他进程对同一
表
的读和写
操作
。并发插入 原则傻姑娘数据
表
有一个读锁时,其他进程无法对
表
进行更新
操作
,但是MyISAM
表
支持查询和插入的并发进行 ...
MS-SQL Server
34,594
社区成员
254,589
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章