이 문서는 지원되지 않는 스포츠 토토 베트맨 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.토토 사이트 추천 : 문서 : 17 : 3.4. 업무버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

3.4. 업무

거래근본적인 것입니다 모든 데이터베이스 시스템의 개념. A의 본질적인 점 스포츠 토토 베트맨은 여러 단계를 단일로 묶는다는 것입니다. 전부 아니면 전무(all-or-nothing) 작전. 사이의 중간 상태 단계는 다른 동시 스포츠 토토 베트맨에 표시되지 않으며, 스포츠 토토 베트맨을 방해하는 일부 오류가 발생합니다. 완료되면 어떤 단계도 데이터베이스에 영향을 주지 않습니다. 모두.

예를 들어, 잔고가 포함된 은행 데이터베이스를 생각해 보세요 다양한 고객 계좌 및 총 예금 잔액에 대한 지점용. $100.00의 지불을 기록한다고 가정합니다. Alice의 계정에서 Bob의 계정으로. 터무니없이 단순화하고, 이에 대한 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은 그렇지 않은 $100.00를 받았습니다. 앨리스에게서 차감되었습니다. 앨리스도 오랫동안 행복한 고객으로 남아 있지 않을 것입니다. Bob이 입금되지 않고 그녀가 인출된 경우. 우리는 도중에 문제가 발생하더라도 작업을 수행하면 지금까지 실행한 단계가 적용되지 않습니다. 업데이트를 a로 그룹화거래이런 보증을 제공합니다. 거래는 다음과 같습니다.원자: 다른 사람의 관점에서 거래가 완전히 발생하거나 전혀 발생하지 않을 수 있습니다.

또한 거래가 완료되면 보장을 원합니다. 그리고 데이터베이스 시스템에서 이를 인식한 것은 실제로 영구적으로 기록되며 충돌이 발생하더라도 손실되지 않습니다. 그 직후. 예를 들어 현금으로 기록하는 경우 Bob이 인출한 경우, 우리는 인출 금액이 다음과 같이 될 가능성을 원하지 않습니다. 그의 계정은 그가 밖으로 나간 직후 충돌로 인해 사라질 것입니다 은행 문. 트랜잭션 데이터베이스는 모든 것을 보장합니다. 트랜잭션에 의한 업데이트는 영구 저장소에 기록됩니다. (즉, 디스크에서) 트랜잭션이 완료되었다고 보고되기 전입니다.

트랜잭션 데이터베이스의 또 다른 중요한 속성은 원자 업데이트 개념과 밀접하게 관련되어 있습니다. 트랜잭션이 동시에 실행 중이므로 각 트랜잭션이 실행되어서는 안 됩니다. 다른 사람이 수행한 불완전한 변경 사항을 볼 수 있습니다. 예를 들어, 하나의 트랜잭션이 모든 지점 잔액을 합산하는 데 바쁜 경우 Alice의 지점에서 차변을 포함하는 것은 불가능하지만 Bob의 지점에 대한 크레딧이 아니며 그 반대도 마찬가지입니다. 그래서 거래 영구적인 측면에서 뿐만 아니라 전부 아니면 전무여야 합니다. 데이터베이스에 미치는 영향뿐만 아니라 가시성 측면에서도 그런 일이 일어납니다. 공개 트랜잭션을 통해 지금까지 이루어진 업데이트는 다음과 같습니다. 거래가 완료될 때까지 다른 거래에는 보이지 않습니다. 그러면 모든 업데이트가 동시에 표시됩니다.

스포츠 토토 베트맨, 거래 트랜잭션의 SQL 명령을 다음으로 둘러싸서 설정됩니다.시작그리고커밋명령. 따라서 우리의 은행 거래는 실제로는 다음과 같습니다:

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

만약 거래 도중에 우리가 원하지 않는다고 결정한 경우 (아마 우리는 Alice의 잔액이 음수), 명령을 내릴 수 있습니다.롤백대신에커밋, 지금까지의 모든 업데이트는 취소되었습니다.

스포츠 토토 베트맨실제로 치료합니다 모든 SQL 문은 스포츠 토토 베트맨 내에서 실행됩니다. 만약에 당신은 발행하지 않습니다시작명령, 그러면 각 개별 문에는 암시적인시작및 (성공한 경우)커밋둘러싸여 있습니다. 진술 그룹 둘러싸여 있다시작그리고커밋때때로 a라고도 함거래 차단.

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

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

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

이 모든 것은 거래 블록 내에서 발생하므로 다른 데이터베이스 세션에서도 볼 수 있습니다. 커밋하는 시기와 커밋하는 경우 트랜잭션 블록에서 커밋된 작업은 다음과 같이 표시됩니다. 롤백된 작업은 다른 세션으로 전환되지 않습니다. 전혀 보이지 않게 됩니다.

은행 데이터베이스를 기억하면서 우리가 $100.00를 인출한다고 가정하겠습니다. 나중에 찾으려면 Alice의 계정과 Bob의 계정에 크레딧을 입력하세요. 우리가 Wally의 계좌에 입금했어야 했다고요. 우리는 그것을 할 수 있었다 다음과 같이 저장점을 사용합니다.

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

이 예는 물론 지나치게 단순화되었지만 많은 내용이 있습니다 을 사용하여 트랜잭션 블록에서 제어가 가능합니다. 저장점. 게다가다음으로 롤백이것은 투입된 거래 블록에 대한 통제권을 다시 얻을 수 있는 유일한 방법 오류로 인해 시스템에 의해 중단된 상태(롤링 부족) 완전히 돌아와서 다시 시작하세요.