su-tudy 님의 블로그

DCL과 TCL 본문

DBMS/Part 4. 데이터베이스 고급

DCL과 TCL

su-tudy 2024. 10. 19. 19:02

 

𖤐 권한 관리와 트랜잭션

 

DCL은 누가 DB에 어떤 작업을 할 수 있는지 권한을 관리하는 명령어고, TCL은 데이터 변경 작업을 하나의 묶음으로 처리하는 트랜잭션을 제어하는 명령어다. 특히 트랜잭션은 데이터 안전성과 직결되기 때문에 실무에서 매우 중요하다.

 


𖤐 정리 노트

 

✧ DCL - 데이터 제어어

▸ GRANT - 권한 부여

특정 유저에게 DB 작업 권한을 부여한다.

-- 기본 문법
GRANT 권한 ON 데이터베이스.테이블 TO '유저'@'호스트';

-- 예시: user1에게 mydb의 모든 테이블에 SELECT, INSERT 권한 부여
GRANT SELECT, INSERT ON mydb.* TO 'user1'@'localhost';

-- 모든 권한 부여
GRANT ALL PRIVILEGES ON mydb.* TO 'user1'@'localhost';

-- 권한 적용
FLUSH PRIVILEGES;

 

▸ REVOKE - 권한 회수

부여한 권한을 다시 빼앗는다.

-- 기본 문법
REVOKE 권한 ON 데이터베이스.테이블 FROM '유저'@'호스트';

-- 예시: user1의 INSERT 권한만 회수
REVOKE INSERT ON mydb.* FROM 'user1'@'localhost';

-- 모든 권한 회수
REVOKE ALL PRIVILEGES ON mydb.* FROM 'user1'@'localhost';

 

▸ 주요 권한 종류

권한 종류
SELECT 데이터 조회
INSERT 데이터 삽입
UPDATE 데이터 수정
DELETE 데이터 삭제
CREATE 테이블 생성
DROP 테이블 삭제
ALL PRIVILEGES 모든 권한

 


✧ TCL - 트랜잭션 제어어

▸ 트랜잭션이란?

트랜잭션은 하나의 작업 단위로 묶인 SQL 명령어 집합이다. 중간에 하나라도 실패하면 전체를 되돌릴 수 있다.

은행 이체를 예로 들면, "A 계좌에서 출금 → B 계좌에 입금" 이 두 작업은 반드시 같이 성공하거나 같이 실패해야 한다. 출금만 되고 입금이 안 되면 데이터가 망가진다. 이걸 하나의 트랜잭션으로 묶어서 보호하는 것이다.

 

▸ ACID 원칙

트랜잭션이 보장해야 하는 4가지 원칙이다.

원칙 설명
Atomicity (원자성) 전부 성공하거나 전부 실패. 중간 상태 없음
Consistency (일관성) 트랜잭션 전후로 데이터 무결성이 유지됨
Isolation (격리성) 동시에 실행되는 트랜잭션이 서로 영향을 주지 않음
Durability (지속성) COMMIT된 데이터는 장애가 발생해도 유지됨

 

▸ COMMIT

트랜잭션 작업을 DB에 영구적으로 반영한다. COMMIT 이후엔 ROLLBACK 불가다.

INSERT INTO accounts (id, balance) VALUES (1, 10000);
INSERT INTO accounts (id, balance) VALUES (2, 20000);
COMMIT;  -- 두 INSERT가 확정됨

 

▸ ROLLBACK

트랜잭션 작업을 취소하고 이전 상태로 되돌린다.

UPDATE accounts SET balance = balance - 5000 WHERE id = 1;
UPDATE accounts SET balance = balance + 5000 WHERE id = 2;

-- 뭔가 잘못됐다면
ROLLBACK;  -- 두 UPDATE 모두 취소됨

 

▸ SAVEPOINT

트랜잭션 중간에 저장 지점을 만들어두고 특정 지점으로만 되돌릴 수 있다.

INSERT INTO orders VALUES (1, 'A상품');
SAVEPOINT sp1;                          -- 저장 지점 생성

INSERT INTO orders VALUES (2, 'B상품');
SAVEPOINT sp2;

INSERT INTO orders VALUES (3, 'C상품');

ROLLBACK TO sp1;  -- sp1 이후 작업(B, C 삽입)만 취소
                  -- A상품 삽입은 유지됨

COMMIT;           -- A상품만 최종 확정

 

▸AUTO COMMIT

MySQL은 기본적으로 AUTO COMMIT 모드로 동작한다. SQL을 실행할 때마다 자동으로 COMMIT이 된다는 뜻이다.

-- AUTO COMMIT 확인
SHOW VARIABLES LIKE 'autocommit';

-- AUTO COMMIT 끄기 (수동 트랜잭션 시작)
SET autocommit = 0;

-- AUTO COMMIT 켜기
SET autocommit = 1;
💡 AUTO COMMIT이 켜져 있으면 UPDATE, DELETE를 실행한 즉시 확정되기 때문에 실수해도 ROLLBACK이 안 된다. 중요한 작업을 할 때는 AUTO COMMIT을 끄고 수동으로 COMMIT/ROLLBACK을 관리하는 게 안전하다

 


𖤐 체크포인트

 

🚨 주의 — DDL은 ROLLBACK 안 됨
TCL은 DML(INSERT, UPDATE, DELETE)에만 적용된다. CREATE, DROP, TRUNCATE 같은 DDL은 실행 즉시 AUTO COMMIT되어 ROLLBACK이 불가능하다.

🚨 실무에서 ROLLBACK이 중요한 이유
여러 테이블에 걸쳐 데이터를 변경하는 작업 중 하나라도 실패하면 전체를 되돌려야 데이터가 일관성을 유지한다. 트랜잭션 없이 작업하다가 중간에 오류나면 일부만 반영된 상태로 남게 된다.

 


𖤐 오늘의 한 줄 요약

 

GRANT/REVOKE로 권한을 관리하고, COMMIT/ROLLBACK/SAVEPOINT로 트랜잭션을 제어한다. MySQL은 AUTO COMMIT이 기본이라 중요한 작업은 꺼두고 수동으로 관리하자. DDL은 ROLLBACK 안 된다는 것도 기억하자.

'DBMS > Part 4. 데이터베이스 고급' 카테고리의 다른 글

고급 SQL과 설계  (0) 2026.04.22