SQL-트랜잭션

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

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

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

거래의 속성

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

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

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

  • Isolation − 거래가 서로 독립적이고 투명하게 운영 될 수 있습니다.

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

거래 통제

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

  • COMMIT − 변경 사항을 저장합니다.

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

  • SAVEPOINT − ROLLBACK 할 트랜잭션 그룹 내에서 포인트를 생성합니다.

  • SET TRANSACTION − 거래에 이름을 붙입니다.

트랜잭션 제어 명령

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

COMMIT 명령

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

COMMIT 명령은 트랜잭션에 의해 호출 된 변경 사항을 데이터베이스에 저장하는 데 사용되는 트랜잭션 명령입니다. COMMIT 명령은 마지막 COMMIT 또는 ROLLBACK 명령 이후 모든 트랜잭션을 데이터베이스에 저장합니다.

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

COMMIT;

Example

다음 레코드가있는 CUSTOMERS 테이블을 고려하십시오.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

다음은 age = 25 인 테이블에서 해당 레코드를 삭제 한 다음 데이터베이스에서 변경 사항을 커밋하는 예제입니다.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> COMMIT;

따라서 테이블에서 두 행이 삭제되고 SELECT 문이 다음 결과를 생성합니다.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

ROLLBACK 명령

ROLLBACK 명령은 데이터베이스에 아직 저장되지 않은 트랜잭션을 실행 취소하는 데 사용되는 트랜잭션 명령입니다. 이 명령은 마지막 COMMIT 또는 ROLLBACK 명령이 실행 된 이후 트랜잭션을 실행 취소하는 데만 사용할 수 있습니다.

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

ROLLBACK;

Example

다음 레코드가있는 CUSTOMERS 테이블을 고려하십시오.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

다음은 연령 = 25 인 테이블에서 해당 레코드를 삭제 한 다음 데이터베이스의 변경 사항을 ROLLBACK하는 예입니다.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> ROLLBACK;

따라서 삭제 작업은 테이블에 영향을주지 않으며 SELECT 문은 다음 결과를 생성합니다.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

SAVEPOINT 명령

SAVEPOINT는 전체 트랜잭션을 롤백하지 않고 특정 지점으로 트랜잭션을 롤백 할 수있는 트랜잭션의 지점입니다.

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

SAVEPOINT SAVEPOINT_NAME;

이 명령은 모든 트랜잭션 문 중에서 SAVEPOINT를 만드는 데만 사용됩니다. ROLLBACK 명령은 트랜잭션 그룹을 실행 취소하는 데 사용됩니다.

SAVEPOINT로 롤백하는 구문은 다음과 같습니다.

ROLLBACK TO SAVEPOINT_NAME;

다음은 CUSTOMERS 테이블에서 세 가지 다른 레코드를 삭제하려는 예입니다. 삭제할 때마다 SAVEPOINT를 생성하여 언제든지 SAVEPOINT로 ROLLBACK하여 적절한 데이터를 원래 상태로 되돌릴 수 있습니다.

Example

다음 레코드가있는 CUSTOMERS 테이블을 고려하십시오.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

다음 코드 블록에는 일련의 작업이 포함되어 있습니다.

SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

이제 세 가지 삭제가 수행되었으므로 마음이 바뀌었고 SP2로 식별 한 SAVEPOINT로 롤백하기로 결정했다고 가정하겠습니다. SP2는 첫 번째 삭제 후에 생성되었으므로 마지막 두 삭제는 취소됩니다.

SQL> ROLLBACK TO SP2;
Rollback complete.

SP2로 롤백 한 이후 첫 번째 삭제 만 발생했습니다.

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.

RELEASE SAVEPOINT 명령

RELEASE SAVEPOINT 명령은 작성한 SAVEPOINT를 제거하는 데 사용됩니다.

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

RELEASE SAVEPOINT SAVEPOINT_NAME;

SAVEPOINT가 해제되면 더 이상 ROLLBACK 명령을 사용하여 마지막 SAVEPOINT 이후 수행 된 트랜잭션을 실행 취소 할 수 없습니다.

SET TRANSACTION 명령

SET TRANSACTION 명령을 사용하여 데이터베이스 트랜잭션을 시작할 수 있습니다. 이 명령은 다음 트랜잭션의 특성을 지정하는 데 사용됩니다. 예를 들어 트랜잭션을 읽기 전용 또는 읽기 쓰기로 지정할 수 있습니다.

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

SET TRANSACTION [ READ WRITE | READ ONLY ];