Chinaunix

标题: 关于锁的问题 [打印本页]

作者: xiechunlu    时间: 2009-03-13 20:30
标题: 关于锁的问题
请问运行一条sql语句

像: update table_name set column_1 = 12

或者:
     select * from table_name

这些语句的时候,sybase会不会对该条 record 加锁的呢
作者: snow888    时间: 2009-03-14 13:36
原帖由 xiechunlu 于 2009-3-13 20:30 发表
请问运行一条sql语句

像: update table_name set column_1 = 12

或者:
     select * from table_name

这些语句的时候,sybase会不会对该条 record 加锁的呢


select 的时候不会

update 的时候有可能会锁,也可能不会锁。

锁的机制是在建表的时候指定的,同时用于行级锁的表,必须建立唯一性索引或主键。
作者: sybase软件服务    时间: 2009-03-15 13:31
select会在相关数据上持有share lock,根据不同的数据访问程度,可能会是row lock、page lock或者table lock。
update会在相关数据上持有exclusive lock.
作者: xiechunlu    时间: 2009-03-15 22:01
原帖由 sybase软件服务 于 2009-3-15 13:31 发表
select会在相关数据上持有share lock,根据不同的数据访问程度,可能会是row lock、page lock或者table lock。
update会在相关数据上持有exclusive lock.


无论什么隔离度,select都会持有share lock ,update都会持有exclusive lock吗?

无论隔离度是0,1,或者2,3 吗
作者: D_D_D_D    时间: 2009-03-15 23:50
原帖由 xiechunlu 于 2009-3-15 22:01 发表


无论什么隔离度,select都会持有share lock ,update都会持有exclusive lock吗?

无论隔离度是0,1,或者2,3 吗



不一定了,产生脏读就是因为在select的时候进行了update,产生更新丢失就是在update的时候另一个update起了作用。
作者: snow888    时间: 2009-03-16 22:31
原帖由 sybase软件服务 于 2009-3-15 13:31 发表
select会在相关数据上持有share lock,根据不同的数据访问程度,可能会是row lock、page lock或者table lock。
update会在相关数据上持有exclusive lock.



这也不一定,

select 的时候可以指定 for update ,这个时候就是独占锁。

关键在于建表的时候指定的锁的机制 。。。
作者: camham    时间: 2009-03-17 11:16
标题: 回复 #4 xiechunlu 的帖子
哪个操作都会有锁,问题是锁的持续期有多久。
如果在transaction里,要看在哪个隔离级别才能决定




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2