PostgreSQL-거래

트랜잭션은 데이터베이스에 대해 수행되는 작업 단위입니다. 트랜잭션은 사용자가 수동으로 수행하거나 일종의 데이터베이스 프로그램에 의해 자동으로 수행되는 논리적 순서로 수행되는 작업 단위 또는 시퀀스입니다.

트랜잭션은 데이터베이스에 대한 하나 이상의 변경 사항을 전파하는 것입니다. 예를 들어, 레코드를 작성하거나 레코드를 업데이트하거나 테이블에서 레코드를 삭제하는 경우 테이블에서 트랜잭션을 수행하는 것입니다. 데이터 무결성을 보장하고 데이터베이스 오류를 처리하기 위해 트랜잭션을 제어하는 ​​것이 중요합니다.

실제로 많은 PostgreSQL 쿼리를 그룹으로 묶고 트랜잭션의 일부로 모두 함께 실행합니다.

거래의 속성

트랜잭션은 일반적으로 ACID라는 약어로 참조되는 다음 네 가지 표준 속성을 가지고 있습니다.

  • Atomicity− 작업 단위 내의 모든 작업이 성공적으로 완료되었는지 확인합니다. 그렇지 않으면 트랜잭션이 실패 지점에서 중단되고 이전 작업이 이전 상태로 롤백됩니다.

  • Consistency − 성공적으로 커밋 된 트랜잭션에서 데이터베이스가 상태를 적절하게 변경하는지 확인합니다.

  • Isolation − 트랜잭션이 서로 독립적이고 투명하게 작동 할 수 있습니다.

  • Durability − 시스템 장애시 커밋 된 트랜잭션의 결과 또는 효과가 지속되도록합니다.

거래 통제

다음 명령은 트랜잭션을 제어하는 ​​데 사용됩니다-

  • BEGIN TRANSACTION − 거래 시작.

  • COMMIT − 변경 사항을 저장하려면 또는 END TRANSACTION 명령.

  • ROLLBACK − 변경 사항을 롤백합니다.

트랜잭션 제어 명령은 DML 명령 INSERT, UPDATE 및 DELETE에만 사용됩니다. 이러한 작업은 데이터베이스에서 자동으로 커밋되기 때문에 테이블을 생성하거나 삭제하는 동안에는 사용할 수 없습니다.

BEGIN TRANSACTION 명령

트랜잭션은 BEGIN TRANSACTION 또는 단순히 BEGIN 명령을 사용하여 시작할 수 있습니다. 이러한 트랜잭션은 일반적으로 다음 COMMIT 또는 ROLLBACK 명령이 발생할 때까지 지속됩니다. 그러나 데이터베이스가 닫히거나 오류가 발생하면 트랜잭션도 ROLLBACK됩니다.

다음은 트랜잭션을 시작하는 간단한 구문입니다.

BEGIN;

or

BEGIN TRANSACTION;

COMMIT 명령

COMMIT 명령은 트랜잭션에 의해 호출 된 변경 사항을 데이터베이스에 저장하는 데 사용되는 트랜잭션 명령입니다.

COMMIT 명령은 마지막 COMMIT 또는 ROLLBACK 명령 이후 모든 트랜잭션을 데이터베이스에 저장합니다.

COMMIT 명령의 구문은 다음과 같습니다.

COMMIT;

or

END TRANSACTION;

ROLLBACK 명령

ROLLBACK 명령은 데이터베이스에 아직 저장되지 않은 트랜잭션을 실행 취소하는 데 사용되는 트랜잭션 명령입니다.

ROLLBACK 명령은 마지막 COMMIT 또는 ROLLBACK 명령이 발행 된 이후 트랜잭션을 실행 취소하는 데만 사용할 수 있습니다.

ROLLBACK 명령의 구문은 다음과 같습니다.

ROLLBACK;

고려 회사 테이블에 다음과 같은 기록을 가지고있다 -

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

이제 트랜잭션을 시작하고 age = 25 인 테이블에서 레코드를 삭제하고 마지막으로 ROLLBACK 명령을 사용하여 모든 변경 사항을 취소합니다.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;

COMPANY 테이블에 여전히 다음 레코드가 있는지 확인하는 경우-

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

이제 다른 트랜잭션을 시작하고 age = 25 인 테이블에서 레코드를 삭제하고 마지막으로 COMMIT 명령을 사용하여 모든 변경 사항을 커밋합니다.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

COMPANY 테이블을 확인하면 다음과 같은 레코드가 있습니다.

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(5 rows)