Aka*_* KC 1 sql-server transaction truncate isolation-level
因为我正在处理将 SQL SERVER 作为数据库的项目......我在我的项目中维护隔离级别,我为我的项目启用了快照隔离级别......
由于我必须进行一些脏读,我正在使用设置查询它。我已经SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED.
在存储过程中实现了它......这是我存储过程的简短版本
ALTER PROCEDURE [dbo].[proc_ReadDirtyData]
@id INT,
@mode VARCHAR(5)
AS
BEGIN
--Read Dirty Data
IF (@mode = 'RDD')
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM tbl_transaction
WHERE id = @id;--@id foreign key in tbl_transaction.
--This read has been done during the transaction from C# Apps
END
END
Run Code Online (Sandbox Code Playgroud)
在我的 C# 应用程序中,保持以下结构
snapshot transaction start
stage1 : tblmaster --generates id
stage2 :tblchild --inserts the data with above id as foreign key.After successfull inserting,
--dirty read goes here applying where equal to above id for other operation
if(operationSuccessful)
{
transactionCommit()
}
else
{
transactionRollback();
}
snapshot transaction end
Run Code Online (Sandbox Code Playgroud)
在操作表上进行 TRUNCATE 操作后,我在 stage2 中遇到问题...
我一直在检查它是否进行了正确的脏读,所以我用来清除发生脏读的特定表的数据......
但是,当我TRUNCATE
用于清除表数据时,问题就出现了......如果我使用TRUNCATE
,我不能像使用一样进行脏读DELETE
,它非常适合脏读......
在这里,我想明确一点,我不会在 TRUNCATE/DELETE 操作期间进行脏读……仅在 TRUNCATE/DELETE 操作之后,我会进行新数据的脏读……
现在,我很好奇是否TRUNCATE
会影响该表的内部隔离....
Mar*_*ith 11
TRUNCATE
table 将SCH-M
在 table 上锁定。
即使在READ UNCOMMITTED
级别上,SELECT
查询也需要SCH-S
锁定。在TRUNCATE
事务结束并且冲突SCH-M
锁被释放之前,这是不可能的。
归档时间: |
|
查看次数: |
3044 次 |
最近记录: |