su-tudy 님의 블로그
DCL과 TCL 본문
𖤐 권한 관리와 트랜잭션
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;
𖤐 체크포인트
🚨 주의 — 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 |
|---|