UXO Studio
  • 데이터베이스 08 : 트랜잭션 관리
    2024년 09월 25일 17시 13분 29초에 업로드 된 글입니다.
    작성자: UXO Studio

     

     

    01 트랜잭션

    02 온라인 트랜잭션 처리 OLTP On-Line Transaction Processing

    03 트랜잭션의 예

     

     

     

     

    01 트랜잭션

     : 논리적인 작업의 단위

     ex) 입금, 출금, 계좌이체, 잔고확인 등

     

     

     트랜잭션의 ACID 속성

     - 원자성 Atomicity

     - 일관성 Consistency

     - 고립성 Isolation

     - 영구성 Durability

     

     

     

     

    02 온라인 트랜잭션 처리 OLTP On-Line Transaction Processing

     : 많은 수의 단수한 트랜잭션들이 동시에 실해되는 응용

     - 데이터베이스 시스템의 전형적인 응용 분야

     ex) 인터넷 뱅킹, 주식 거래, 철도 예약 

     

     

     

     

    03 트랜잭션의 예

     

     

     철도 예약 트랜잭션

    Begin_transaction Reservation
    begin
    input(flight_no, date, customer_name);
    EXEC SQL SELECT STSOLD, CAP INTO :temp1, :temp2
    FROM FLIGHT WHERE FNO = :flight_no AND DATE = :date;
    if (temp1 == temp2) then { output(“no free seats”); ABORT }
    else {
    EXEC SQL UPDATE FLIGHT
    SET STSOLD = STSOLD + 1
    WHERE FNO = :flight_no AND DATE = :date;
    if (sqlca.sqlcode != 0) then ABORT;
    EXEC SQL INSERT INTO FC(FNO, DATE, CNAME, SPECIAL)
    VALUES(:flight_no, :date, :customer_name, NULL);
    if (sqlca.sqlcode != 0) then ABORT;
    COMMIT;
    Output(“reservation completed”);
    }
    end.

     

     

    철도 예약 트랜잭션 해

    -- 트랜잭션 시작
    begin
    
    -- 항공편 번호와 날짜에 따른 좌석 정보를 입력받음
    input(flight_no, date, customer_name);
    
    -- 선택된 항공편의 판매된 좌석 수(STSOLD)와 최대 좌석 수(CAP)를 조회
    EXEC SQL SELECT STSOLD, CAP INTO :temp1, :temp2
    FROM FLIGHT WHERE FNO = :flight_no AND DATE = :date;
    
    -- 만약 판매된 좌석 수(temp1)가 최대 좌석 수(temp2)와 같다면
    -- 좌석이 없다는 메시지를 출력하고 트랜잭션 중단(롤백)
    if (temp1 == temp2) then { 
        output("no free seats"); 
        ABORT; 
    }
    else {
        -- 좌석이 있으면 판매된 좌석 수를 1 증가시킴
        EXEC SQL UPDATE FLIGHT
        SET STSOLD = STSOLD + 1
        WHERE FNO = :flight_no AND DATE = :date;
    
        -- 업데이트에 오류가 발생하면 트랜잭션 중단(롤백)
        if (sqlca.sqlcode != 0) then ABORT;
    
        -- 예약 정보(고객 이름 등)를 항공편 예약 테이블(FC)에 추가
        EXEC SQL INSERT INTO FC(FNO, DATE, CNAME, SPECIAL)
        VALUES(:flight_no, :date, :customer_name, NULL);
    
        -- 예약 정보 추가에 오류가 발생하면 트랜잭션 중단(롤백)
        if (sqlca.sqlcode != 0) then ABORT;
    
        -- 모든 작업이 성공하면 트랜잭션 완료(커밋)하고 완료 메시지 출력
        COMMIT;
        Output("reservation completed");
    }
    -- 트랜잭션 종료
    end;

     

     

     

     

    #트랜잭션 #OLTP #온라인트랜잭션처리 #트랜잭션예시 #트랜잭션ACID #원자성 #일관성 #고립성 #영구성 #인터넷뱅킹 #주식거래 #철도예약 #트랜잭션처리 #DBMS #데이터베이스관리 #트랜잭션속성 #SQL트랜잭션 #트랜잭션처리예제 #ACID속성 #예약시스템

    댓글