繁体   English   中英

TRANSACTION ISOLATION LEVEL SERIALIZABLE是否创建READ锁定

[英]Does TRANSACTION ISOLATIoN LEVEL SERIALIZABLE create READ lock

对于什么是简单的问题,我似乎找不到直接的答案。 如果我在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

TRUNCATE TABLE将获得TRUNCATE TABLE 独占 shema修改锁,以防止所有用户从表中读取 (除非他们使用 TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDWITH(NOLOCK)并写入表(写入时没有例外)。 排他锁将在COMMIT TRANSACTION释放。

编辑:正如马丁·史密斯(Martin Smith)在其truncate表下方的注释中指出的那样,它将获得一个模式修改锁。 意味着在进行提交或回滚之前,没有其他用户可以读取或修改表。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM