关于锁的问题
请问运行一条sql语句像: update table_name set column_1 = 12
或者:
select * from table_name
这些语句的时候,sybase会不会对该条 record 加锁的呢 原帖由 xiechunlu 于 2009-3-13 20:30 发表 http://bbs3.chinaunix.net/images/common/back.gif
请问运行一条sql语句
像: update table_name set column_1 = 12
或者:
select * from table_name
这些语句的时候,sybase会不会对该条 record 加锁的呢
select 的时候不会
update 的时候有可能会锁,也可能不会锁。
锁的机制是在建表的时候指定的,同时用于行级锁的表,必须建立唯一性索引或主键。 select会在相关数据上持有share lock,根据不同的数据访问程度,可能会是row lock、page lock或者table lock。
update会在相关数据上持有exclusive lock. 原帖由 sybase软件服务 于 2009-3-15 13:31 发表 http://bbs2.chinaunix.net/images/common/back.gif
select会在相关数据上持有share lock,根据不同的数据访问程度,可能会是row lock、page lock或者table lock。
update会在相关数据上持有exclusive lock.
无论什么隔离度,select都会持有share lock ,update都会持有exclusive lock吗?
无论隔离度是0,1,或者2,3 吗 原帖由 xiechunlu 于 2009-3-15 22:01 发表 http://bbs3.chinaunix.net/images/common/back.gif
无论什么隔离度,select都会持有share lock ,update都会持有exclusive lock吗?
无论隔离度是0,1,或者2,3 吗
不一定了,产生脏读就是因为在select的时候进行了update,产生更新丢失就是在update的时候另一个update起了作用。 原帖由 sybase软件服务 于 2009-3-15 13:31 发表 http://bbs3.chinaunix.net/images/common/back.gif
select会在相关数据上持有share lock,根据不同的数据访问程度,可能会是row lock、page lock或者table lock。
update会在相关数据上持有exclusive lock.
这也不一定,
select 的时候可以指定 for update ,这个时候就是独占锁。
关键在于建表的时候指定的锁的机制 。。。
回复 #4 xiechunlu 的帖子
哪个操作都会有锁,问题是锁的持续期有多久。如果在transaction里,要看在哪个隔离级别才能决定
页:
[1]