欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

数据库共享锁的有关问题

更新时间: 2014-01-05 02:11:00 责任编辑: Author_N1

 

数据库共享锁的问题
大家都知道select获得的是共享锁,许多用户可以同时查询相同的数据。
但是我有一个疑问!?

1.如果数据是从内存中获得那么共享锁可以说的通。

2.如果数据不在内存中,而要从磁盘读取??一个磁盘有多少个磁头?应该只有一个吧。

如果几个用户访问相同的数据,而这数据不在内存中。
问他们可以同时读取数据?这个时候共享锁该怎么解释呢?
--参考方法--
据说select是没有锁的
--参考方法--
2.如果数据不在内存中,而要从磁盘读取??一个磁盘有多少个磁头?应该只有一个吧
====================================================================
知道为什么磁盘称为块设备吗?那是因为磁盘上的数据你只能能寻址到块,磁盘上的数据是不能按字节寻址的,所以要操作任何数据,都必须将数据读入到内存中来,操作完了,再写回磁盘。所以所谓锁,是一个内存中数据结构。对数据块内容的操作(数据行的读写)都是在内存中进行的。所以锁应该是一个内存上的概念,和磁盘无关。
--参考方法--
Oracle的select是没有锁的
你可以测试一下
打开一个cursor,然后查询v$lock.
--参考方法--
引用:
引用:Oracle的select是没有锁的
你可以测试一下
打开一个cursor,然后查询v$lock.

select确实没有锁。
我想问下,什么时候 要加/会加 共享锁呢?
e.g lock table name in share mode


这个得按需求来,比如,你的需求是"只允许其他的用户查询表中的行,但是不允许插入、更新或删除行",那么这个时候你就可以使用S锁
这个的粒度是表级别,以下几种情况为加上S锁:
① 在创建索引时,会缺省地加上S锁。7*24业务这条语句(等价于建索引)会使得所有DML都被阻塞
② SELECT ... FOR UPDATE 
③ 还有你举的那个例子,是手工加上S锁
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:11:00
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6674/
本文WWW.DOC100.NET DOC100.NET版权所有。