繁体   English   中英

可序列化的隔离级别 - 它会阻止读取吗?

[英]Serializable isolation level - does it block read?

我只读过可序列化的隔离级别块:插入、更新、删除但不读。

我已经运行了一个 window:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;  

UPDATE [dbo].[Categories]
SET name = 'aaa'
WHERE categoryid = 4;

-- without commit

而在第二个 window 中:

SELECT TOP (1000) [CategoryId]
      ,[Name]
  FROM [dbo].[Categories]

上面的查询正在等待第一个查询的结束。 那么序列化隔离级别块也读吗?

是的,它会阻止读取。 您的事务未提交,因此您仍然可以进行回滚。 这意味着在您提交之前,任何其他进程都不应读取您更新的数据。

“是否还读取序列化隔离级别块”:否。Serializable 获取了一些锁(在 Sql 女士中,它的共享锁 + 范围锁)阻止了其他事务的写入。 它的 UPDATE 语句的排他锁(上面的共享锁现在转换为排他锁)防止第二个事务的 SELECT (Read Commited or Repeatable Read by deafult 取决于 db)等待。

暂无
暂无

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

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