G'daySQL 서버 2005에서 Serializable이 작동하는 방식
제가 serializable에 대한 오해가 있다고 생각합니다. 두 개의 테이블 (데이터, 트랜잭션) serializable 트랜잭션을 삽입 할 정보가 있습니다 (둘 다 또는 둘 다 있지만 limbo 없습니다).
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
읽기 완료 된 격리 수준에서 트랜잭션이없는 항목에 대해 데이터 테이블을 검사하는 조정 쿼리가 있습니다. ID가 복합 (2 열) 키, 그래서 사용할 수없는 사실이다
INSERT INTO reconciles (ReconcileID, DataID)
SELECT Reconcile = @ReconcileID, ID FROM Data
WHERE NOT EXISTS (SELECT 1 FROM TRANSACTIONS WHERE data.id = transactions.id)
주 해당 없음 연산자
나의 이해는 두 번째 쿼리가없이 데이터로 기록 된 모든 값을 제외 것이라고했다 이 삽입이 직렬화시에 발생하고 해당 읽기가 커밋 된 읽기에서 발생했습니다.
그래서 내가 본 것은 Reconcile 쿼리가 격리 수준으로 인해 불가능하다고 생각한이 쿼리와 함께 입력 할 때 데이터 테이블에 있지만 트랜잭션 테이블에있는 데이터 항목을 선택했음을 나타냅니다.
무슨 일이 있었는지 명확하게 표시하여 제 질문을 업데이트했습니다. Insert는 모든 격리 수준에서 동일하게 작동합니다. 그래서 당신은 그들이 롤백에만 유용하다는 것을 말하고 있습니다. 나는 그것을 작업 단위라고 이해하고 있었으며, 직렬화가 가능하다는 것을 완전히 이해했거나 다시 읽어야한다는 말을 들었습니까? – Spence