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 发表 http://bbs3.chinaunix.net/images/common/back.gif
请问运行一条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 发表 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 吗

D_D_D_D 发表于 2009-03-15 23:50

原帖由 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起了作用。

snow888 发表于 2009-03-16 22:31

原帖由 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 ,这个时候就是独占锁。

关键在于建表的时候指定的锁的机制 。。。

camham 发表于 2009-03-17 11:16

回复 #4 xiechunlu 的帖子

哪个操作都会有锁,问题是锁的持续期有多久。
如果在transaction里,要看在哪个隔离级别才能决定
页: [1]
查看完整版本: 关于锁的问题