问高手一句,数据量大时,在检索表中数据select中利用order by给该表加上s锁吗

AmiaBoy 2003-07-11 03:30:43
数据量较大是指点在sql server中表上右键->返回所有行,不是一下子把数据都检索出来而是先检出部分数据,点滚动条再检索出部分数据的情况。

如果对该表利用select * from 表名 order by 列名,从管理活动中可以看出
对该表加了s(shared)锁,导致其它事务不能修改该表的数据。

我说的对不对请高手指点,也请说明原因
...全文
153 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
AmiaBoy 2003-07-14
  • 打赏
  • 举报
回复
--这和你的INDEX的分配和检索的数据分布有关
具体的index分配情况能不能介绍一些
leimin 2003-07-13
  • 打赏
  • 举报
回复
请问在企业管理器设置select的默认锁哪里?
在SQLSERVER中没有LOCK的类型配置,你只可以通过HINTS来强制指定。

在MSSQLSERVER6.5时,SELECT * FROM TABLENAME默认是表级锁,在SQLSERVER7.0/2000时,select * from tablename where...默认是行级锁和叶级锁,这和你的INDEX的分配和检索的数据分布有关。

select * from TABLE order by COLUMN
会为表加上s锁,导致其它事务不能修改该表。
SQLSERVER在排序是默认是加S锁的。
AmiaBoy 2003-07-12
  • 打赏
  • 举报
回复
我的一个表有两个索引,一个为一列,一个为四列,数据量较大利用
select * from TABLE
会为表加上is锁。
但是我用
select * from TABLE order by COLUMN
会为表加上s锁,导致其它事务不能修改该表。
但是我把四列的索引删除,
再次select * from TABLE order by COLUMN时加的是s锁,
请问高手这是什么原因
pengdali 2003-07-11
  • 打赏
  • 举报
回复
数据量较大是指点在sql server中表上右键->返回所有行,不是一下子把数据都检索出来而是先检出部分数据,点滚动条再检索出部分数据的情况。



如果对该表利用select * from 表名 order by 列名,从管理活动中可以看出
对该表加了s(shared)锁,导致其它事务不能修改该表的数据。

SET IMPLICIT_TRANSACTIONS ON --用户每次必须显式提交或回滚。否则当用户断开连接时,
--事务及其所包含的所有数据更改将回滚

SET IMPLICIT_TRANSACTIONS OFF --自动提交模式。在自动提交模式下,如果各个语句成功
--完成则提交。
AmiaBoy 2003-07-11
  • 打赏
  • 举报
回复
但是我的select * from 表就没有加锁,
select * from 表名 order by 列名就给表加上了s锁导致其他事务不能修改数据

请问在企业管理器设置select的默认锁哪里
CrazyFor 2003-07-11
  • 打赏
  • 举报
回复
select * from 表名 order by 列名

SELECT是不会加锁的,除非:

select * from 表名 with (PAGLOCK)

---------------
SELECT 语句中“加锁选项”的功能说明
SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能。用

户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的

效果。 本文介绍了SELECT语句中的各项“加锁选项”以及相应的功能说明。
功能说明: 
NOLOCK(不加锁)
此选项被选中时,SQL Server 在读取或修改数据时不加任何锁。 在这种情况下,用户

有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所

谓的“脏数据”。

HOLDLOCK(保持锁)
此选项被选中时,SQL Server 会将此共享锁保持至整个事务结束,而不会在途中释放



UPDLOCK(修改锁)
此选项被选中时,SQL Server 在读取数据时使用修改锁来代替共享锁,并将此锁保持

至整个事务或命令结束。使用此选项能够保证多个进程能同时读取数据但只有该进程能

修改数据。

TABLOCK(表锁)
此选项被选中时,SQL Server 将在整个表上置共享锁直至该命令结束。 这个选项保证

其他进程只能读取而不能修改数据。

PAGLOCK(页锁)
此选项为默认选项, 当被选中时,SQL Server 使用共享页锁。

TABLOCKX(排它表锁)
此选项被选中时,SQL Server 将在整个表上置排它锁直至该命令或事务结束。这将防

止其他进程读取或修改表中的数据。

使用这些选项将使系统忽略原先在SET语句设定的事务隔离级别(Transaction

Isolation Level)。 请查阅SQL Server 联机手册获取更多信息。

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧