首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

查询最大值是不是需要对表进行锁定

2013-06-19 
查询最大值是否需要对表进行锁定?大家请看这里噢,:)请问,查询最大值时,是否需要对表进行加锁。因为考虑到查

查询最大值是否需要对表进行锁定?
大家请看这里噢,:)
请问,查询最大值时,是否需要对表进行加锁。
因为考虑到查询最大值时,可能会同时有新插入的记录,这样查询的最大值是否准确?
sql server本身select或insert时就会产生锁,是不?
select?insert?加锁
[解决办法]
锁是肯定加的,但是不一定是锁定表。如果是MAX的字段是Clustered Index的话,一条记录就可以得到值了。如果不是的话可能需要INDEX SCAN或者TABLE SCAN需要锁定表的数据。 
[解决办法]
请问,查询最大值时,是否需要对表进行加锁。
--> 不一定,看查询语句的写法.


 select max([字段]) from [表名] --> 加锁
 select max([字段]) from [表名](nolock) --> 不加锁


因为考虑到查询最大值时,可能会同时有新插入的记录,这样查询的最大值是否准确?
--> 相对于查询的那个时刻,是最大值.
    相对于现在,不一定是最大值.

sql server本身select或insert时就会产生锁,是不?
--> 是的.
[解决办法]
取最大值作为插入数据的新值是不可取的,在并发时会重复
如果是sqlserver2012 推荐使用SequenceNumber
如果是sql2000考虑自增长,
实在不行的话,用一个表来维护编号,写个存储过程,每次取了就加1 (我经常用这招)
 UPDATE tbID SET @id_value=id_value=id_value+1
WHERE table_name=@table_name
[解决办法]
如果已经有了一个自增列了
那就用存储过程来维护吧

热点排行