DML, TCL, DDL, DCL 관리 구문
INSERT, UPDATE, DELETE, MERGE와 COMMIT, ROLLBACK, CREATE, ALTER, DROP, GRANT, REVOKE를 시험에서 자주 출제되는 유의 사항 중심으로 정리합니다.
출제 빈도 ★★★★☆ 관련 문제 14개 |
MERGETRUNCATECOMMITGRANTCTAS 관리 구문을 공부하는 기준
관리 구문은 데이터가 아닌 “어떻게 다루는가” 에 대한 명령입니다. DML(행 조작), TCL(변경 확정·취소), DDL(구조), DCL(권한) 네 그룹을 먼저 분리해 두면 헷갈리기 쉬운 문제를 쉽게 구분할 수 있습니다.
DML — INSERT / UPDATE / DELETE / MERGE
INSERT 기본 형태
-- 컬럼 명시
INSERT INTO emp (empno, ename, sal)
VALUES (9001, 'KIM', 2500);
-- 전체 컬럼 (순서대로)
INSERT INTO emp VALUES (9001, 'KIM', ...);
-- SELECT 결과를 삽입
INSERT INTO emp_backup
SELECT * FROM emp WHERE deptno = 10;
UPDATE / DELETE + 서브쿼리
-- 부서 10의 급여를 전체 평균으로 갱신
UPDATE emp
SET sal = (SELECT AVG(sal) FROM emp)
WHERE deptno = 10;
-- 'OPERATIONS' 부서 사원 모두 삭제
DELETE FROM emp
WHERE deptno IN (
SELECT deptno FROM dept WHERE dname = 'OPERATIONS'
);
MERGE — UPSERT
MERGE는 INSERT와 UPDATE를 조건적으로 수행하는 UPSERT 구문입니다. 대용량 배치에서 자주 사용합니다.
MERGE INTO target t
USING source s
ON (t.id = s.id)
WHEN MATCHED THEN
UPDATE SET t.name = s.name, t.sal = s.sal
WHEN NOT MATCHED THEN
INSERT (id, name, sal) VALUES (s.id, s.name, s.sal);
TCL — 트랜잭션 제어
COMMIT / ROLLBACK
COMMIT= 현재 트랜잭션 변경을 영구 반영ROLLBACK= 마지막 COMMIT 이후 변경 전부 취소- 실행 후 모든 SAVEPOINT 자동 해제
SAVEPOINT
- 트랜잭션 내 중간 지점 표시
ROLLBACK TO sp1= sp1 이후만 취소- 이전 작업은 유지, 이어서 작업 가능
INSERT INTO emp VALUES (9001, 'KIM', ...);
SAVEPOINT sp1;
INSERT INTO emp VALUES (9002, 'LEE', ...);
ROLLBACK TO sp1; -- LEE만 취소, KIM은 유지
COMMIT; -- KIM 영구 반영
DDL — 구조 변경
| 동사 | 용도 |
|---|---|
CREATE | 새 객체 생성 (테이블·뷰·인덱스·시퀀스·시노님) |
ALTER | 기존 객체 변경 (컬럼 추가·수정, 제약조건 추가) |
DROP | 객체 삭제 (Oracle 10g+는 휴지통으로 이동) |
TRUNCATE | 테이블 내 모든 행을 고속 삭제 (DDL, 롤백 불가) |
RENAME | 이름 변경 |
CTAS (Create Table As Select)
-- old_t 구조만 복제 (WHERE 1=0 → 데이터 없이)
CREATE TABLE new_t AS SELECT * FROM old_t WHERE 1=0;
-- 데이터까지 전체 복사
CREATE TABLE new_t AS SELECT * FROM old_t;
DROP vs TRUNCATE vs DELETE
| 구분 | 분류 | 조건 가능? | 롤백 가능? | 속도 | 테이블 구조 |
|---|---|---|---|---|---|
DELETE | DML | ✓ (WHERE) | ✓ | 느림 (행별 로그) | 유지 |
TRUNCATE | DDL | ✗ (전체만) | ✗ (암시적 COMMIT) | 고속 (저장공간 초기화) | 유지 |
DROP | DDL | ✗ | ✗ (Oracle 10g+ FLASHBACK 가능) | 즉시 | 제거 |
-- 완전히 삭제 (휴지통 경유 없음)
DROP TABLE emp PURGE;
-- Oracle 10g+ 실수 복구
FLASHBACK TABLE emp TO BEFORE DROP;
DCL — 권한 관리
-- SELECT 권한 부여
GRANT SELECT ON emp TO hr;
-- 권한 회수
REVOKE SELECT ON emp FROM hr;
-- hr이 다른 사용자에게 재부여 가능
GRANT SELECT ON emp TO hr WITH GRANT OPTION;
| 옵션 | 의미 |
|---|---|
WITH GRANT OPTION | 받은 사용자가 이 권한을 다른 사용자에게도 부여 가능 (객체 권한용) |
WITH ADMIN OPTION | 시스템 권한을 전파 가능 (CREATE SESSION 등) |
VIEW / INDEX / SEQUENCE / SYNONYM
| 객체 | 용도 | 특이사항 |
|---|---|---|
VIEW | 저장된 SELECT (쿼리 재실행) | WITH READ ONLY / WITH CHECK OPTION |
INDEX | 조회 성능 향상 자료구조 | PK/UNIQUE는 자동 생성, DML 오버헤드 있음 |
SEQUENCE | 고유 번호 생성기 | NEXTVAL / CURRVAL, ROLLBACK해도 값이 재사용되지 않음 (gap 허용) |
SYNONYM | 객체 별칭 (PUBLIC / PRIVATE) | DROP SYNONYM은 원본과 무관하며, 별칭만 제거 |
-- 시퀀스 생성
CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1;
-- 사용
INSERT INTO emp (empno, ename) VALUES (emp_seq.NEXTVAL, 'KIM');
-- 현재 세션의 마지막 값 조회 (NEXTVAL 먼저 호출 필요)
SELECT emp_seq.CURRVAL FROM DUAL;
DML은 행, DDL은 구조·즉시 커밋, DCL은 권한, TCL은 변경의 확정과 취소를 다룹니다.