거래는 모든 윈 토토터베이스 시스템의 기본 개념입니다. 트랜잭션의 필수 요점은 여러 단계를 단일 또는 전혀없는 작업으로 묶는다는 것입니다.
예를 들어, 다양한 고객 계정에 대한 잔액이 포함 된 은행 데이터베이스와 지점의 총 예금 잔고를 고려하십시오. Alice의 계정에서 Bob의 계정으로 $ 100.00의 지불을 기록하고 싶다고 가정하십시오.
업데이트 계정 세트 밸런스 = 밸런스 -100.00
이 명령의 세부 사항은 여기에서 중요하지 않습니다. 중요한 점은이 간단한 작업을 수행하기위한 몇 가지 별도의 업윈 토토트가 있다는 것입니다.거래우리 에게이 보증을 제공합니다. 거래는Atomic: 다른 거래의 관점에서 볼 때, 그것은 완전히 발생하거나 전혀 발생하지 않습니다.
우리는 또한 윈 토토터베이스 시스템에 의해 트랜잭션이 완료되고 인정되면 실제로 영구적으로 기록되었으며 그 후 곧 충돌이 발생하더라도 손실되지 않을 것이라는 보장을 원합니다. 예를 들어, Bob이 현금 인출을 기록하는 경우, 우리는 그의 계좌에 대한 차변이 은행 문 밖으로 나간 직후 사고로 사라질 가능성이 없습니다.
트랜잭션 윈 토토터베이스의 또 다른 중요한 속성은 원자 업윈 토토트의 개념과 밀접한 관련이 있습니다. 여러 트랜잭션이 동시에 실행될 때 각각은 다른 사람이 불완전한 변경 사항을 볼 수 없어야합니다. 예를 들어, 하나의 트랜잭션이 모든 지점 잔액을 총계로 바쁘게하는 경우 Alice의 지점에서 차변을 포함시키지 않지만 Bob의 지점에 대한 크레딧은 포함되지 않으며 그 반대도 마찬가지입니다.
inPostgreSQL, 트랜잭션의 SQL 명령을 둘러싼 트랜잭션은시작
및커밋
명령. 그래서 우리의 은행 거래는 실제로 다음과 같습니다.
시작;
거래를 통해 파트 웨이를 통해 커밋하고 싶지 않다고 결정하면 (아마도 우리는 앨리스의 잔액이 부정적인 것으로 나타 났을 것입니다), 우리는 명령을 발행 할 수 있습니다.롤백
대신커밋
, 지금까지 모든 업윈 토토트가 취소됩니다.
PostgreSQL실제로 모든 SQL 문을 거래 내에서 실행되는 것으로 취급합니다. 당신이 a를 발행하지 않으면시작
명령, 그러면 각 개별 진술은 암시 적입니다시작
및 (성공한 경우)커밋
그 주위에 싸여 있습니다. 둘러싸인 진술 그룹시작
및커밋
가끔 a라고합니다.트랜잭션 블록.
일부 클라이언트 라이브러리 문제시작
및커밋
묻지 않고 트랜잭션 블록의 효과를 얻을 수 있도록 자동으로 명령을 내립니다. 사용중인 인터페이스에 대한 설명서를 확인하십시오.
|SavePoints. 저장 포인트를 사용하면 나머지를 커밋하면서 거래의 일부를 선택적으로 폐기 할 수 있습니다.SavePoint
, 필요한 경우 SavePoint로 롤백으로 롤백 할 수 있습니다.롤백으로
. SavePoint 정의와 롤백으로 롤백 간의 모든 트랜잭션의 데이터베이스 변경 사항은 폐기되지만 SavePoint보다 일찍 변경됩니다.
SavePoint로 롤백 한 후에도 계속 정의되므로 여러 번 롤백 할 수 있습니다. 반대로, 특정 SavePoint로 다시 롤백 할 필요가 없다고 확신하면 해제 될 수 있으므로 시스템은 일부 리소스를 확보 할 수 있습니다.
이 모든 것은 트랜잭션 블록 내에서 발생하므로 다른 데이터베이스 세션에는 보이지 않습니다. 트랜잭션 블록을 커밋하는 경우, 헌신적 인 조치는 다른 세션의 단위로 보이게되며, 롤백 동작은 전혀 보이지 않습니다.
은행 데이터베이스를 기억하고, 우리가 Alice의 계정에서 $ 100.00를 차지하고 Bob의 계정을 인정한다고 가정 해보십시오. 우리는 다음과 같은 SavePoints를 사용하여 할 수 있습니다.
시작;
이 예제는 물론 지나치게 단순화되었지만 SavePoints를 사용하여 트랜잭션 블록에 많은 제어가 가능합니다. 게다가,롤백으로
오류로 인해 시스템에 의해 중단 된 트랜잭션 블록의 제어를 회복하는 유일한 방법입니다.
올바르지 않은 문서에 아무것도 표시되면 일치하지 않습니다.이 양식문서 문제를보고하려면