2025년 9월 25일:토토 커뮤니티 : 토토
이 문서는 지원되지 않는 롤 토토 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.토토 사이트 추천 : 문서 : 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라고도 함거래 차단.

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