,所以应只在必要时才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOLDLOCK 相同。
注释
一次只能设置这些选项中的一个,而且设置的选项将一直对那个连接保持有效,直到显式更改该选项为止。这是默认行为,除非在语句的 FROM 子句中在表级上指定优化选项。
SET TRANSACTION ISOLATION LEVEL 的设置是在执行或运行时设置,而不是在分析时设置。
示例
下例为会话设置 TRANSACTION ISOLATION LEVEL。对于每个后续 Transact-SQL 语句,SQL Server 将所有共享锁一直控制到事务结束为止。 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO
BEGIN TRANSACTION
SELECT * FROM publishers
SELECT * FROM authors
...
COMMIT TRANSACTION
2、自定义事务隔离级别
默认情况下,Microsoft® SQL Server™ 2000 在 READ COMMITTED 的一个隔离级别上操作。但是,应用程序可能必须运行于不同的隔离级别。若要在应用程序中使用更严格或较宽松的隔离级别,可以通过使用 SET TRANSACTION ISOLATION LEVEL 语句设置会话的隔离级别,来自定义整个会话的锁定。
指定隔离级别后,SQL Server 会话中所有 SELECT 语句的锁定行为都运行于该隔离级别上,并一直保持有效直到会话终止或者将隔离级别设置为另一个级别。例如,若要设置事务隔离级别为可串行读,以确保并发事务不能在 authors 表中插入幻像行,请执行: USE pubs
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION
SELECT au_lname FROM authors
说明 如果必要,可以通过指定表级锁定提示来替代单个 SELECT 语句的隔离级别。指定表级锁定提示不会影响会话中的其它语句。建议仅在绝对必要时才使用表级锁定提示更改默认的锁定行为。
若要确定当前设置的事务隔离级别,请使用 DBCC USEROPTIONS 语句,例如: USE pubs
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO
DBCC USEROPTIONS
GO
Set Option
Value
Textsize
4096
Language
us_english
Dateformat
mdy
Datefirst
7
isolation level
repeatable read
(5 rows affected)
DBCC execution completed. If DBCC printed error messages, see your System Administrator.
3、调整事务隔离级别
隔离属性是 ACID 的四个属性之一,逻辑工作单元必须具备这四个属性才能称为事务。该属性能够使事务免受其它并发事务所执行的更新的影响。每个事务的隔离级别实际上都是可以自定义的。
Microsoft® SQL Server™ 支持 SQL-92 中定义的事务隔离级别。设置事务隔离级别虽然使程序员承担了某些完整性问题所带来的风险,但可以换取对数据更大的并发访问权。与以前的隔离级别相比,每个隔离级别都提供了更大的隔离性,但这是通过在更长的时间内占用更多限制锁换来的。事务隔离级别有:
|