BEGIN에서는 COMMIT, 및 ROLLBACK문을 사용하여 PostgreSQL 트랜잭션을 처리하는 방법

 

데이터베이스 트랜잭션은 하나 이상의 작업으로 구성된 단일 작업 단위입니다.

 

PostgreSQL 트랜잭션은 원자적이며 일관성이 있으며 격리되고 내구성이 있습니다. 이러한 속성을 종종 ACID라고 합니다.

  • Atomicity은 트랜잭션이 전부 아니면 전무(all or nothing) 방식으로 완료되도록 보장합니다.
  • Consistency은 데이터베이스에 기록된 데이터에 대한 변경이 유효하고 사전 정의된 규칙을 따라야 함을 보장합니다.
  • Isolation는 트랜잭션 무결성이 다른 트랜잭션에 표시되는 방식을 결정합니다.
  • Durability은 커밋된 트랜잭션이 데이터베이스에 영구적으로 저장되도록 합니다.

 

비긴: 트랜잭션을 시작하려면 다음 문을 사용합니다.

BEGIN TRANSACTION ;

or 

BEGIN WORK;

or

BEGIN;

 

커밋: 변경 사항이 다른 세션(또는 사용자)에게 표시되도록 합니다.

COMMIT WORK ;

COMMIT TRANSACTION;

COMMIT;

 

롤백 : 현재 트랜잭션의 변경 사항을 롤백하거나 실행 취소합니다.

ROLLBACK WORK;

ROLLBACK TRANSACTION;

ROLLBACK;

 

반응형

DROP TABLE IF EXISTS accounts;

CREATE TABLE accounts (
    id INT GENERATED BY DEFAULT AS IDENTITY,
    name VARCHAR(100) NOT NULL,
    balance DEC(15,2) NOT NULL,
    PRIMARY KEY(id)
);

 

INSERT INTO accounts(name,balance)
VALUES('Bob',10000);

 

BEGIN;

INSERT INTO accounts(name,balance)
VALUES('Alice',10000);
SELECT 
    id,
    name,
    balance
FROM 
    accounts;

 

-- start a transaction
BEGIN;

-- insert a new row into the accounts table
INSERT INTO accounts(name,balance)
VALUES('Alice',10000);

-- commit the change (or roll it back later)
COMMIT;
-- start a transaction
BEGIN;

-- deduct 1000 from account 1
UPDATE accounts 
SET balance = balance - 1000
WHERE id = 1;

-- add 1000 to account 2
UPDATE accounts
SET balance = balance + 1000
WHERE id = 2; 

-- select the data from accounts
SELECT id, name, balance
FROM accounts;

-- commit the transaction
COMMIT;

 

-- begin the transaction
BEGIN;

-- deduct the amount from the account 1
UPDATE accounts 
SET balance = balance - 1500
WHERE id = 1;

-- add the amount from the account 3 (instead of 2)
UPDATE accounts
SET balance = balance + 1500
WHERE id = 3; 

-- roll back the transaction
ROLLBACK;
반응형

'SW ENGINEERING > Postgres' 카테고리의 다른 글

[PostgreSQL] BASIC - Data Types - 1  (0) 2021.09.06
[PostgreSQL] Import CSV File & export CSV File  (0) 2021.09.06
[PostgreSQL] BASIC - Upsert  (0) 2021.09.06
[PostgreSQL] BASIC - DELETE  (0) 2021.09.06
[PostgreSQL] BASIC - UPDATE Join  (0) 2021.09.06
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기