3.4. 거래#

거래은 모든 데이터베이스 시스템의 기본 개념입니다. 토토 사이트 추천의 핵심은 여러 단계를 하나의 전부 아니면 전무 작업으로 묶는 것입니다. 단계 사이의 중간 상태는 다른 동시 토토 사이트 추천에 표시되지 않으며 일부 오류가 발생하여 토토 사이트 추천 완료를 방해하는 경우 어떤 단계도 데이터베이스에 전혀 영향을 미치지 않습니다.

예를 들어, 다양한 고객 계좌의 잔액과 지점의 총 예금 잔액이 포함된 은행 데이터베이스를 생각해 보세요. Alice의 계좌에서 Bob의 계좌로 $100.00의 지불을 기록하려고 한다고 가정합니다. 엄청나게 단순화하면 이에 대한 SQL 명령은 다음과 같습니다.

UPDATE 계정 SET 잔액 = 잔액 - 100.00
    WHERE 이름 = '앨리스';
UPDATE 분기 SET 잔액 = 잔액 - 100.00
    WHERE 이름 = (SELECT Branch_name FROM 계정 WHERE 이름 = 'Alice');
UPDATE 계정 SET 잔액 = 잔액 + 100.00
    WHERE 이름 = '밥';
UPDATE 분기 SET 잔액 = 잔액 + 100.00
    WHERE 이름 = (SELECT Branch_name FROM 계정 WHERE 이름 = 'Bob');

이 명령의 세부사항은 여기서 중요하지 않습니다. 중요한 점은 이 간단한 작업을 수행하기 위해 여러 가지 별도의 업데이트가 필요하다는 것입니다. 우리 은행 직원은 이러한 모든 업데이트가 발생하는지 아니면 아무것도 발생하지 않는지 확인하기를 원할 것입니다. 시스템 오류로 인해 Bob이 Alice에게서 인출되지 않은 $100.00를 받는 것은 확실히 불가능합니다. Bob이 입금되지 않고 인출이 이루어지면 Alice는 오랫동안 행복한 고객으로 남지 않을 것입니다. 작업 도중에 문제가 발생하면 지금까지 실행한 단계 중 어느 것도 적용되지 않는다는 보장이 필요합니다. 업데이트를 a로 그룹화거래이런 보증을 제공합니다. 거래는 다음과 같습니다.원자: 다른 거래의 관점에서 보면 완전히 발생하거나 전혀 발생하지 않습니다.

또한 토토 사이트 추천이 완료되고 데이터베이스 시스템에 의해 승인되면 영구적으로 기록되고 잠시 후 충돌이 발생하더라도 손실되지 않을 것이라는 보장을 원합니다. 예를 들어, Bob의 현금 인출을 기록하는 경우 Bob이 은행 문을 나서자마자 충돌이 발생하여 그의 계좌에 대한 인출이 사라질 가능성을 원하지 않습니다. 토토 사이트 추천 데이터베이스는 토토 사이트 추천이 완료되었다고 보고되기 전에 토토 사이트 추천에 의해 수행된 모든 업데이트가 영구 저장소(예: 디스크)에 기록되도록 보장합니다.

트랜잭션 데이터베이스의 또 다른 중요한 속성은 원자 업데이트 개념과 밀접하게 관련되어 있습니다. 여러 트랜잭션이 동시에 실행될 때 각 트랜잭션은 다른 트랜잭션이 수행한 불완전한 변경 사항을 볼 수 없어야 합니다. 예를 들어, 하나의 트랜잭션이 모든 지점 잔액을 합산하는 데 바쁜 경우 Alice 지점의 차변은 포함하지만 Bob 지점의 대변은 포함하지 않으며 그 반대의 경우도 마찬가지입니다. 따라서 트랜잭션은 데이터베이스에 대한 영구적인 영향뿐만 아니라 발생 시 가시성 측면에서도 전부 아니면 전무여야 합니다. 공개 트랜잭션에 의해 지금까지 수행된 업데이트는 트랜잭션이 완료될 때까지 다른 트랜잭션에 표시되지 않으며 모든 업데이트가 동시에 표시됩니다.

토토 사이트 추천, 토토 사이트 추천의 SQL 명령을로 묶어서 토토 사이트 추천이 설정됩니다.시작그리고커밋명령. 따라서 은행 거래는 실제로 다음과 같습니다.

시작;
UPDATE 계정 SET 잔액 = 잔액 - 100.00
    WHERE 이름 = '앨리스';
-- 기타 등등
커밋;

트랜잭션 도중에 커밋을 원하지 않는다고 결정한 경우(아마도 Alice의 잔고가 마이너스가 된 것을 방금 알아차렸을 수도 있음) 명령을 내릴 수 있습니다.롤백대신커밋, 지금까지의 모든 업데이트가 취소됩니다.

토토 사이트 추천실제로 모든 SQL 문을 토토 사이트 추천 내에서 실행되는 것으로 처리합니다. a를 발행하지 않는 경우시작명령을 실행하면 각 개별 명령문에는 암시적인시작및 (성공한 경우)커밋둘러싸여 있습니다. 로 둘러싸인 명령문 그룹시작그리고커밋때때로 a라고도 함거래 차단.

참고

일부 클라이언트 라이브러리 문제시작그리고커밋자동으로 명령을 내리므로 묻지 않고도 거래 차단 효과를 얻을 수 있습니다. 사용 중인 인터페이스에 대한 설명서를 확인하세요.

다음을 사용하여 보다 세부적인 방식으로 트랜잭션의 명령문을 제어할 수 있습니다.저장점. 저장점을 사용하면 트랜잭션의 일부를 선택적으로 삭제하고 나머지는 커밋할 수 있습니다. 다음을 사용하여 저장점을 정의한 후세이브포인트, 필요한 경우 다음을 사용하여 저장점으로 롤백할 수 있습니다.다음으로 롤백. 저장점 정의와 롤백 사이의 모든 트랜잭션 데이터베이스 변경 사항은 삭제되지만 저장점 이전의 변경 사항은 유지됩니다.

저장점으로 롤백한 후에도 계속 정의되므로 여러 번 롤백할 수 있습니다. 반대로 특정 저장점으로 다시 롤백할 필요가 없다고 확신하는 경우 해당 저장점을 해제하여 시스템에서 일부 리소스를 확보할 수 있습니다. 저장점을 해제하거나 롤백하면 이후에 정의된 모든 저장점이 자동으로 해제됩니다.

이 모든 것은 트랜잭션 블록 내에서 발생하므로 다른 데이터베이스 세션에서는 그 어느 것도 볼 수 없습니다. 트랜잭션 블록을 커밋하면 커밋된 작업이 다른 세션에 하나의 단위로 표시되는 반면, 롤백된 작업은 전혀 표시되지 않습니다.

은행 데이터베이스를 기억하면서 우리가 Alice의 계좌에서 $100.00를 인출하고 Bob의 계좌에 입금했는데 나중에 Wally의 계좌에 입금했어야 했다는 것을 알게 되었다고 가정해 보겠습니다. 다음과 같은 저장점을 사용하여 이를 수행할 수 있습니다.

시작;
UPDATE 계정 SET 잔액 = 잔액 - 100.00
    WHERE 이름 = '앨리스';
SAVEPOINT my_savepoint;
UPDATE 계정 SET 잔액 = 잔액 + 100.00
    WHERE 이름 = '밥';
-- 이런... 그건 잊어버리고 Wally의 계정을 사용하세요
my_savepoint로 롤백;
UPDATE 계정 SET 잔액 = 잔액 + 100.00
    WHERE 이름 = '월리';
저지르다;

이 예는 물론 지나치게 단순화되었지만 저장점을 사용하여 트랜잭션 블록에서 많은 제어가 가능합니다. 게다가다음으로 롤백완전히 롤백하고 다시 시작하지 않고 오류로 인해 시스템에 의해 중단된 상태가 된 트랜잭션 블록에 대한 제어권을 다시 얻을 수 있는 유일한 방법입니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.