본문으로 건너뛰기
SQLD 준비실
이론 전체 목차 열기 18 / 32

SQL 기본 및 활용 · 관리 구문 18 / 32

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

MERGEINSERT와 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

구분분류조건 가능?롤백 가능?속도테이블 구조
DELETEDML✓ (WHERE)느림 (행별 로그)유지
TRUNCATEDDL✗ (전체만)✗ (암시적 COMMIT)고속 (저장공간 초기화)유지
DROPDDL✗ (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은 변경의 확정과 취소를 다룹니다.