DML 문 및 트랜잭션 정보

DML(데이터 조작어) 문은 데이터베이스 테이블 데이터를 추가, 변경 및 삭제합니다. 트랜잭션은 Oracle AI Database가 하나의 단위로 취급하는 하나 이상의 SQL 문의 시퀀스입니다. 즉, 명령문을 모두 수행하거나 이들 중 하나도 실행하지 않았습니다.

트랜잭션 제어 명령문 정보

트랜잭션은 Oracle AI Database가 하나의 단위로 취급하는 하나 이상의 SQL 문의 시퀀스입니다. 즉, 명령문을 모두 수행하거나 이들 중 하나도 실행하지 않았습니다. 여러 작업을 하나의 단위로 수행해야 하는 비즈니스 프로세스를 모델링할 트랜잭션이 필요합니다.

예를 들어, 관리자가 회사를 떠나는 경우 관리자의 부재 시기를 표시할 행을 JOB_HISTORY 테이블에 삽입해야 하며, 해당 관리자에게 보고하는 모든 직원의 MANAGER_ID 값을 EMPLOYEES 테이블에서 갱신해야 합니다. 응용 프로그램에서 이 프로세스를 모델링하려면 INSERT 및 UPDATE 문을 단일 트랜잭션으로 그룹화해야 합니다.

기본 트랜잭션 제어 명령문은 다음과 같습니다.

SQL*Plus 환경에서 SQL> 프롬프트가 표시된 후 트랜잭션 제어 명령문을 입력할 수 있습니다.

SQL Developer 환경에서 워크시트에 트랜잭션 제어 명령문을 입력할 수 있습니다. SQL Developer에는 "트랜잭션 커밋" 및 "트랜잭션 롤백"에 설명된 [변경 사항 커밋] 및 [변경 사항 롤백] 아이콘도 있습니다.

주의:

트랜잭션을 명시적으로 커밋하지 않은 상태와 프로그램이 비정상적으로 종료되면 데이터베이스는 커밋되지 않은 마지막 트랜잭션을 자동으로 롤백합니다.

응용 프로그램에서 트랜잭션을 커밋하거나 롤백하여 명시적으로 종료하는 것이 좋습니다.

참조:

트랜잭션 커밋

트랜잭션을 커밋하면 변경 사항이 영구적으로 적용되며, 저장점이 지워지고, 잠금이 해제됩니다.

트랜잭션을 명시적으로 커밋하려면 COMMIT 문 또는 SQL Developer 환경의 경우 변경 사항 커밋 아이콘을 사용하십시오.

주: Oracle AI Database는 DDL(데이터 정의어) 문 전/후에 암시적인 COMMIT 문을 실행합니다. DDL 문에 대한 자세한 내용은 "DDL(데이터 정의어) 문 정보"를 참조하십시오.

트랜잭션을 커밋하기 전:

트랜잭션을 커밋한 후:

예제 3-1에서는 REGIONS 테이블에 행을 추가하고(매우 간단한 트랜잭션), 결과를 확인한 다음 트랜잭션을 커밋합니다.

예제 3-1 트랜잭션 커밋

트랜잭션 이전:

SELECT * FROM REGIONS
ORDER BY REGION_ID;

결과:

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East and Africa

4 rows selected.

트랜잭션(테이블에 행 추가):

INSERT INTO regions (region_id, region_name) VALUES (5, 'Africa');

결과:

1 row created.

추가된 행 확인:

SELECT * FROM REGIONS
ORDER BY REGION_ID;

결과:

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East and Africa
         5 Africa

5 rows selected.

트랜잭션 커밋:

COMMIT;

결과:

Commit complete.

참조: COMMIT 문에 대한 자세한 내용은 Oracle AI Database SQL Language Reference

트랜잭션 롤백

트랜잭션을 롤백하면 변경 사항이 실행 취소됩니다. 현재 트랜잭션 전체를 롤백하거나 지정된 저장점에만 트랜잭션을 롤백할 수 있습니다.

현재 트랜잭션을 지정된 저장점에만 롤백하려면 TO SAVEPOINT 절과 함께 ROLLBACK 문을 사용해야 합니다.

현재 트랜잭션 전체를 롤백하려면 TO SAVEPOINT 절 없이 ROLLBACK 문을 사용하거나 SQL Developer 환경의 경우 변경 사항 롤백과 아이콘을 사용하십시오.

현재 전체 트랜잭션을 롤백합니다.

지정된 저장점에만 현재 트랜잭션 롤백:

SQL Developer에서 롤백의 효과를 확인하려면 새로 고침 아이콘을 눌러야 합니다.

예 3-1의 결과에서와 같이, REGIONS 테이블에는 'Middle East and Africa'라고 하는 지역과 'Africa'라고 하는 지역이 있습니다, 예 3-2에서는 이 문제를 수정하고(매우 간단한 트랜잭션) 변경 사항을 확인한 다음 트랜잭션을 롤백하고 롤백을 확인합니다.

예 3-2 전체 트랜잭션 롤백

트랜잭션 이전:

SELECT * FROM REGIONS
ORDER BY REGION_ID;

결과:

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East and Africa
         5 Africa

5 rows selected.

트랜잭션(테이블 변경):

UPDATE REGIONS
SET REGION_NAME = 'Middle East'
WHERE REGION_NAME = 'Middle East and Africa';

결과:

1 row updated.

변경 사항 확인:

SELECT * FROM REGIONS
ORDER BY REGION_ID;

결과:

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East
         5 Africa

5 rows selected.

트랜잭션 롤백:

ROLLBACK;

결과:

Rollback complete.

롤백 확인:

SELECT * FROM REGIONS
ORDER BY REGION_ID;

결과:

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East and Africa
         5 Africa

5 rows selected.

참조: ROLLBACK 문에 대한 자세한 내용은 Oracle AI Database SQL Language Reference

트랜잭션에 저장점 설정

SAVEPOINT 문은 나중에 롤백할 수 있는 지점인 트랜잭션에 저장점을 표시합니다. 저장점은 선택 사항이며 트랜잭션 하나에 여러 저장점을 사용할 수 있습니다. 예제 3-3에서는 여러 개의 DML 문과 여러 개의 저장점을 포함하는 트랜잭션을 수행한 후 이 트랜잭션을 하나의 저장점에 롤백하여 저장점 이후 수행된 변경 사항만 실행 취소합니다.

예제 3-3 트랜잭션을 저장점으로 롤백

트랜잭션 전에 REGIONS 테이블 확인:

SELECT * FROM REGIONS
ORDER BY REGION_ID;

결과:

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East and Africa
         5 Africa

5 rows selected.

트랜잭션 전에 지역 4의 국가 확인:

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;

결과:

COUNTRY_NAME                             CO  REGION_ID
---------------------------------------- -- ----------
Egypt                                    EG          4
Israel                                   IL          4
Kuwait                                   KW          4
Nigeria                                  NG          4
Zambia                                   ZM          4
Zimbabwe                                 ZW          4

6 rows selected.

트랜잭션 전에 지역 5의 국가 확인:

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;

결과:

no rows selected

여러 개의 저장점이 포함된 트랜잭션:

UPDATE REGIONS
SET REGION_NAME = 'Middle East'
WHERE REGION_NAME = 'Middle East and Africa';

UPDATE COUNTRIES
  SET REGION_ID = 5
  WHERE COUNTRY_ID = 'ZM';
SAVEPOINT zambia;

UPDATE COUNTRIES
  SET REGION_ID = 5
  WHERE COUNTRY_ID = 'NG';
SAVEPOINT nigeria;

UPDATE COUNTRIES
  SET REGION_ID = 5
  WHERE COUNTRY_ID = 'ZW';
SAVEPOINT zimbabwe;

UPDATE COUNTRIES
  SET REGION_ID = 5
  WHERE COUNTRY_ID = 'EG';
SAVEPOINT egypt;

트랜잭션 후에 REGIONS 테이블 확인:

SELECT * FROM REGIONS
ORDER BY REGION_ID;

결과:

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East
         5 Africa

5 rows selected.

트랜잭션 후에 지역 4의 국가 확인:

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;

결과:

COUNTRY_NAME                             CO  REGION_ID
---------------------------------------- -- ----------
Israel                                   IL          4
Kuwait                                   KW          4

2 rows selected.

트랜잭션 후에 지역 5의 국가 확인:

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;

결과:

COUNTRY_NAME                             CO  REGION_ID
---------------------------------------- -- ----------
Egypt                                    EG          5
Nigeria                                  NG          5
Zambia                                   ZM          5
Zimbabwe                                 ZW          5

4 rows selected.

ROLLBACK TO SAVEPOINT nigeria;

롤백 후에 REGIONS 테이블 확인:

SELECT * FROM REGIONS
ORDER BY REGION_ID;

결과:

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East
         5 Africa

5 rows selected.

롤백 후에 지역 4의 국가 확인:

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;

결과:

COUNTRY_NAME                             CO  REGION_ID
---------------------------------------- -- ----------
Egypt                                    EG          4
Israel                                   IL          4
Kuwait                                   KW          4
Zimbabwe                                 ZW          4

4 rows selected.

롤백 후에 지역 5의 국가 확인:

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;

결과:

COUNTRY_NAME                             CO  REGION_ID
---------------------------------------- -- ----------
Nigeria                                  NG          5
Zambia                                   ZM          5

2 rows selected.

참조: SAVEPOINT 문에 대한 자세한 내용은 Oracle AI Database SQL Language Reference