SQL

[SQL] DCL(데이터 제어어), TCL(트랜잭션 제어어)

wodyd3215 2024. 8. 20. 23:30

 

DCL(Data Control Language)

 - 사용자에게 시스템 권한 또는 객체 접근 권한을 부여하거나 회수하는 데 사용하는 구문이다.

 

시스템권한 : DB에 접근하는 권한, 객체를 생성할 수 있는 권한

객체접근권한 : 특정 객체들을 조작할 수 있는 권한

 

 ● DCL 종류

  - GRANT

  - REVOKE

 

 

GRANT

 - 사용자에게 데이터베이스 특정 권한을 부여하는 명령어이다.

GRANT 권한1, 권한2, ... TO 사용자이름;

 

 

REVOKE

 - 사용자에게 부여되어있던 권한을 회수하는 데 사용하는 명령어이다.

REVOKE 권한1, 권한2, ... FROM 사용자이름;

 

 

 

 

TCL(Transaction Control Language)

 - 트랜잭션을 제어할 때 사용하는 명령어로, DML등을 사용하여 데이터의 변경사항을 트랜잭션에 묶어서 처리한다.

 

 ● 트랜잭션

  - 트랜잭션이란 데이터베이스의 논리적 연산단위이다.

  - DML문을 수행할 때 트랜잭션이 존재하지 않는다면 트랜잭션을 만들어서 묶는다.

    트랜잭션이 존재한다면 해당 트랜잭션에 묶어서 처리한다.

  - COMMIT 하기 전까지의 변경사항들을 하나의 트랜잭션에 담은 후 COMMIT 으로 하나의 트랜잭션을 데이터베이스에       반영한다.

 

 ● TCL 종류

  - COMMIT

  - ROLLBACK

  - SAVEPOINT

 

 

COMMIT

 - 한 트랜잭션에 담겨있는 변경사항들을 실제 DB에 반영시키는 데 사용하는 명령어이다.

 

ex)

CREATE TABLE EMP
AS (SELECT EMP_ID, EMP_NAME, DEPT_TITLE
    FROM EMPLOYEE
    JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID));

DELETE FROM EMP
WHERE EMP_ID = 200;

COMMIT;

→ 변경사항들이 트랜잭션에 쌓인 후 COMMIT을 사용하여 트랜잭션에 담겨있는 변경사항들을 데이터베이스에 반영한다.

 

 

ROLLBACK

 - 한 트랜잭션에 담겨있는 변경사항들을 삭제(취소) 한 후, 마지막 COMMIT 시점으로 돌아가는 명령어

 

ex)

CREATE TABLE EMP
AS (SELECT EMP_ID, EMP_NAME, DEPT_TITLE
    FROM EMPLOYEE
    JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID));

DELETE FROM EMP
WHERE EMP_ID = 200;

DELETE FROM EMP
WHERE EMP_ID = 201;

ROLLBACK;

→ 테이블에서 특정 데이터들을 삭제하였지만, ROLLBACK을 진행하여 트랜잭션에 쌓였던 변경사항들이 삭제되고,

   마지막 COMMIT 시점인 테이블 생성 후로 돌아갔다.

→ 따라서, 모두 실행해보면 200번 사원과 201번 사원이 삭제되었다가 다시 돌아온 것을 알 수 있다.

 

DDL문( CREATE, ALTER, DROP )을 수행하는 순간 기존 트랜잭션에 있던 변경사항들이 무조건 COMMIT 된다.

 

 

SAVEPOINT

 - 트랜잭션에 변경사항 중간에 저장점을 두어 원하는 시점으로 ROLLBACK할 수 있도록하는 명령어이다.

CREATE TABLE EMP
AS (SELECT EMP_ID, EMP_NAME, DEPT_TITLE
    FROM EMPLOYEE
    JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID));

DELETE FROM EMP
WHERE EMP_ID = 200;

SAVEPOINT SP1;

DELETE FROM EMP
WHERE EMP_ID = 201;

SAVEPOINT SP2;

ROLLBACK TO SP1;

→ 마지막에 세이브 포인트인 SP1으로 ROLLBACK을 진행하여 200번 사원의 데이터를 삭제한 후의 상황으로 돌아간다.

'SQL' 카테고리의 다른 글

[SQL] 뷰(View), 시퀀스(Sequence), 트리거(Trigger)  (0) 2024.08.22
[SQL] PL / SQL  (0) 2024.08.22
[SQL] 제약 조건  (0) 2024.08.20
[SQL] DDL(데이터 정의어)  (0) 2024.08.20
[SQL] DML(데이터 조작어)  (0) 2024.08.19