G'day
我想我对可序列化有误解。我有两个表(数据、事务),我将信息插入到可序列化事务中(它们要么都在,要么都在外面,但不在边缘)。
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
INSERT INTO dbo.data (ID, data) VALUES (@Id, data)
INSERT INTO dbo.transactions(ID, info) VALUES (@ID, @info)
COMMIT TRANSACTION
我有一个协调查询,它检查数据表中没有处于读取提交隔离级别的事务的条目。
INSERT INTO reconciles (ReconcileID, DataID)
SELECT Reconcile = @ReconcileID, ID FROM Data
WHERE NOT EXISTS (SELECT 1 FROM TRANSACTIONS WHERE data.id = transactions.id)
请注意,ID 实际上是一个复合(2 列)键,所以我不能使用 NOT IN 运算符
我的理解是,第二个查询将排除任何写入数据的值而没有它们的事务,因为此插入发生在可序列化时,而读取发生在读取提交时。
因此,我所看到的是,当使用此查询输入时,Reconcile 查询已获取数据表中但不在事务表中的数据条目,由于隔离级别,我认为这是不可能的。