数据表锁的问题

在同一个表中

set transaction isolation level READ COMMITTED
此设置 为 当查询 很多条数据,例如50万条数,你在另一个 sql 查询分析中修改时,不会等待查询结束。


set transaction isolation level repeatable rea
此设置和他相反,当查询 50万条时, 在另一个sql查询分析器中做修改时,他会等待查询 结束后在修改

SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
READ COMMITTED
控制到 SQL Server 的连接发出的 Transact-SQL 语句的锁定行为和行版本控制行为。


指定语句不能读取已由其他事务修改但尚未提交的数据。这样可以避免脏读。其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取和幻像数据。该选项是 SQL Server 的默认设置。

READ COMMITTED 的行为取决于 READ_COMMITTED_SNAPSHOT 数据库选项的设置:

如果将 READ_COMMITTED_SNAPSHOT 设置为 OFF(默认设置),则数据库引擎 会使用共享锁防止其他事务在当前事务执行读取操作期间修改行。共享锁还会阻止语句在其他事务完成之前读取由这些事务修改的行。语句完成后便会释放共享锁。


如果将 READ_COMMITTED_SNAPSHOT 设置为 ON,则数据库引擎 会使用行版本控制为每个语句提供一个在事务上一致的数据快照,因为该数据在语句开始时就存在。不使用锁来防止其他事务更新数据。


当 READ_COMMITTED_SNAPSHOT 数据库选项设置为 ON 时,您可以使用 READCOMMITTEDLOCK 表提示为 READ_COMMITTED 隔离级别上运行的事务中的各语句请求共享锁,而不是行版本控制。


posted @ 2011-03-31 14:05  n_jiang  阅读(219)  评论(0编辑  收藏  举报