TRANSACTION ISOLATION LEVEL SERIALIZABLE是否会创建READ锁定

时间:2015-02-24 19:09:25

标签: sql sql-server tsql transactions

我似乎无法找到一个应该是一个简单问题的直接答案。如果我在T-SQL中创建一个事务并将ISOLATION LEVEL设置为SERIALIZABLE,这是否会对我正在修改的表创建一个READ锁定?

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
GO
BEGIN TRANSACTION;
GO    
TRUNCATE TABLE TBL_PRODUCTS;
GO
    **INSERT RECORDS HERE**
GO
    COMMIT TRANSACTION;
GO

2 个答案:

答案 0 :(得分:1)

TRUNCATE TABLE将在表上获取 exclusive shema modify 锁,防止所有用户从表中读取(除非他们使用{{1 }}或TRANSACTION ISOLATION LEVEL READ UNCOMMITTED并写入表格(没有写作的例外)。独家锁定将在WITH(NOLOCK)发布。

编辑:正如Martin Smith在下面的评论中指出的那样,truncate table将获得一个架构修改锁。这意味着在提交或回滚之前,没有其他用户能够读取或修改表。

答案 1 :(得分:0)

是的,它会锁定表,这些是可序列化的规则:

  • 语句无法读取已修改但尚未由其他事务提交的数据。
  • 在当前事务完成之前,没有其他事务可以修改当前事务已读取的数据。
  • 在当前事务完成之前,其他事务无法插入具有键值的新行,这些键值将落在当前事务中任何语句读取的键范围内。

https://msdn.microsoft.com/en-us/library/ms173763.aspx