본문 바로가기
자격증/SQLD

[SQLD] 5-1: 데이터 조작어 (DML) 와 트랜잭션 제어(TCL)

by rnasterofmysea 2025. 2. 22.
728x90
반응형

[SQLD] 5-1: 데이터 조작어 (DML) 와 트랜잭션 제어 (TCL)

 


1. DML(Data Manipulation Language)이란?

DML(Data Manipulation Language, 데이터 조작어)데이터베이스 내의 데이터를 조작하는 SQL 명령어의 한 종류입니다. 사용자가 데이터베이스의 테이블에서 데이터를 추가(INSERT), 수정(UPDATE), 삭제(DELETE)하는 데 사용됩니다.

DML은 트랜잭션의 개념과 밀접한 관계가 있으며, 데이터베이스의 무결성을 유지하기 위해 주의 깊게 사용해야 합니다.

DML의 주요 특징

  • 데이터베이스 내의 데이터를 조작하는 역할을 함
  • 트랜잭션과 연관이 있으며, COMMIT, ROLLBACK 명령어를 통해 변경사항을 확정하거나 취소할 수 있음
    • TCL 명령어와 같이 출제됨
  • SELECT 문과 달리 데이터를 변경하는 작업이므로 주의가 필요함

1.1 DML 주요 명령어

 

DML에는 다음과 같은 명령어가 포함됩니다.

명령어  기능
INSERT 새로운 데이터를 테이블에 추가
UPDATE 기존 데이터를 수정
DELETE 특정 데이터를 삭제
MERGE 두 개의 테이블을 비교하여 데이터를 삽입, 수정, 삭제
TRUNCATE 테이블의 모든 데이터를 빠르게 삭제

 


1.2 INSERT 문 - 데이터 삽입

INSERT 문은 테이블에 새로운 행(row)을 추가하는 데 사용됩니다.

 

(1) 기본 문법

INSERT INTO 테이블명 (열1, 열2, 열3, ...)
VALUES (값1, 값2, 값3, ...);
  • INSERT INTO 뒤에 테이블명을 지정하고, 괄호 안에 열(column) 이름을 명시
  • VALUES 뒤에는 추가할 값(value)을 나열
  • 모든 컬럼에 값을 넣을 경우 컬럼명을 생략 가능

(2) 예제

employees 테이블이 있다고 가정합니다.

INSERT INTO employees (emp_id, name, department, salary)
VALUES (103, 'Charlie', 'Finance', 7000);

주의할 점:

  • NOT NULL 제약 조건이 있는 열에는 반드시 값을 입력해야 함
  • PRIMARY KEY로 설정된 컬럼은 중복될 수 없음

 


1.3 UPDATE 문 - 데이터 수정

UPDATE 문은 테이블 내 특정 데이터를 수정하는 데 사용됩니다.

 

(1) 기본 문법

UPDATE 테이블명
SET1 = 값1, 열2 = 값2, ...
WHERE 조건;
  • SET 키워드 뒤에 수정할 컬럼과 변경할 값을 나열
  • WHERE 절을 이용해 특정 조건을 만족하는 행만 수정 가능

(2) 예제

Charlie의 salary 값을 7500으로 변경하려면:

UPDATE employees
SET salary = 7500
WHERE emp_id = 103;

주의할 점:

  • WHERE 절을 생략하면 모든 행의 데이터가 변경되므로 신중하게 사용해야 함

 


1.4 DELETE 문 - 데이터 삭제

DELETE 문은 테이블에서 특정 행을 삭제하는 데 사용됩니다.

 

(1) 기본 문법

DELETE FROM 테이블명
WHERE 조건;
  • DELETE FROM 뒤에 테이블명을 지정
  • WHERE 절을 통해 삭제할 행을 선택 (생략하면 모든 데이터 삭제)

 

(2) 예제

Charlie의 데이터를 삭제하려면:

DELETE FROM employees
WHERE emp_id = 103;

주의할 점:

  • WHERE 절을 생략하면 모든 데이터가 삭제됨
  • 테이블 자체를 비우고 싶다면 TRUNCATE TABLE 테이블명; 사용 (속도 빠름)

 


1.5 TRUNCATE 문 - 테이블 초기화

 

TRUNCATE 문은 테이블의 모든 데이터를 빠르게 삭제하는 명령어입니다.

 

(1) 기본 문법

TRUNCATE TABLE 테이블명;

(2) 예제

 

employees 테이블의 모든 데이터를 삭제하려면:

TRUNCATE TABLE employees;

TRUNCATE 사용 시 주의할 점:

  • DELETE와 달리 모든 데이터를 즉시 삭제하며, 개별 행을 삭제하는 것이 아님
  • 트랜잭션 로그를 최소화하여 속도가 빠름
  • WHERE 절을 사용할 수 없음
  • ROLLBACK이 불가능하므로 신중하게 사용해야 함

 


1.6 MERGE 문 - 데이터 병합

MERGE 문은 두 개의 테이블을 비교하여 데이터를 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 데 사용됩니다.

 

(1) 기본 문법

MERGE INTO 대상_테이블 USING 소스_테이블
ON (조인_조건)
WHEN MATCHED THEN
    UPDATE SET 컬럼1 =1
WHEN NOT MATCHED THEN
    INSERT (컬럼1, 컬럼2) VALUES (값1, 값2);

 

(2) 예제

 

기존 직원 테이블을 업데이트하면서 새로운 직원 데이터를 삽입하는 경우:

MERGE INTO employees e
USING new_employees n
ON (e.emp_id = n.emp_id)
WHEN MATCHED THEN
    UPDATE SET e.salary = n.salary
WHEN NOT MATCHED THEN
    INSERT (emp_id, name, department, salary)
    VALUES (n.emp_id, n.name, n.department, n.salary);

 

MERGE 사용 시 주의할 점:

  • 데이터의 중복을 방지할 수 있음
  • 성능이 중요한 경우 MERGE보다 INSERT ... ON DUPLICATE KEY UPDATE(MySQL) 또는 UPSERT(PostgreSQL)를 고려할 수 있음

 


2. TCL(Transaction Control Language)이란?

TCL(Transaction Control Language)은 트랜잭션을 제어하는 SQL 명령어로, DML(Data Manipulation Language) 명령어와 함께 사용됩니다. 트랜잭션은 여러 개의 DML 문이 하나의 논리적 단위로 실행될 때, 이를 관리하고 조작하는 역할을 합니다.

TCL은 데이터 무결성을 보장하며, 데이터 변경 사항을 확정(Commit)하거나 취소(Rollback)할 수 있도록 돕습니다.

 

2.1 TCL 주요 명령어

 

TCL에는 다음과 같은 명령어가 포함됩니다.

 

COMMIT 트랜잭션의 변경 사항을 저장 (확정)
ROLLBACK 트랜잭션의 변경 사항을 취소 (되돌리기)
SAVEPOINT 트랜잭션 내 특정 지점을 저장 (부분 롤백 가능)
SET TRANSACTION 트랜잭션의 특성을 설정 (격리 수준 설정 가능)

 


 

2.2 COMMIT 문 - 트랜잭션 확정

 

COMMIT 문은 트랜잭션에서 실행된 모든 변경 사항을 데이터베이스에 영구적으로 저장하는 명령어입니다.

 

(1) 기본 문법

COMMIT;

(2) 예제

UPDATE employees SET salary = 8000 WHERE emp_id = 103;
COMMIT;

주의할 점:

  • COMMIT을 실행하면 변경 사항이 확정되므로 되돌릴 수 없음

 


2.3 ROLLBACK 문 - 트랜잭션 취소

ROLLBACK 문은 트랜잭션 내에서 발생한 변경 사항을 취소하는 명령어입니다.

 

(1) 기본 문법

ROLLBACK;

(2) 예제

DELETE FROM employees WHERE emp_id = 103;
ROLLBACK;

주의할 점:

  • ROLLBACK을 실행하면 COMMIT 이전의 상태로 데이터가 복구됨

2.4 SAVEPOINT 문 - 트랜잭션 내 특정 지점 저장

SAVEPOINT 문은 트랜잭션 내에서 특정 시점에 대한 저장점을 설정하여, 필요할 경우 해당 시점까지 부분적으로 롤백할 수 있도록 합니다.

 

(1) 기본 문법

SAVEPOINT 저장점_이름;
ROLLBACK TO 저장점_이름;

(2) 예제

SAVEPOINT sp1;
UPDATE employees SET salary = 9000 WHERE emp_id = 103;
ROLLBACK TO sp1;

주의할 점:

  • ROLLBACK TO 저장점_이름을 사용하면 해당 저장점 이후의 변경 사항만 취소됨

 


2.5 SET TRANSACTION 문 - 트랜잭션 특성 설정

SET TRANSACTION 문은 트랜잭션의 **격리 수준(Isolation Level)**을 설정하는 데 사용됩니다.

(1) 기본 문법

SET TRANSACTION ISOLATION LEVEL 격리수준;

(2) 격리 수준 종류

격리 수준 설명

READ UNCOMMITTED 다른 트랜잭션의 미완료 데이터를 읽을 수 있음 (Dirty Read 발생 가능)
READ COMMITTED 다른 트랜잭션이 COMMIT한 데이터만 읽을 수 있음
REPEATABLE READ 같은 트랜잭션 내에서 동일한 데이터를 여러 번 읽어도 동일한 결과 보장
SERIALIZABLE 트랜잭션이 직렬화되며, 동시 실행이 제한됨 (가장 엄격한 수준)

 

 


3. DML & TCL 문제 예시

 

문제 1: 트랜잭션과 DML

다음 SQL 실행 결과로 올바른 설명을 고르시오.

BEGIN TRANSACTION;
INSERT INTO employees (emp_id, name, department, salary)
VALUES (105, 'Daniel', 'Marketing', 7500);
UPDATE employees SET salary = 8000 WHERE emp_id = 105;
ROLLBACK;
SELECT * FROM employees WHERE emp_id = 105;

 

1) emp_id가 105인 직원이 salary 8000으로 저장된다.
2) emp_id가 105인 직원이 salary 7500으로 저장된다.
3) emp_id가 105인 직원의 정보가 존재하지 않는다.
4) 트랜잭션이 종료되지 않아 employees 테이블이 변경되지 않는다.

 

정답: 3) emp_id가 105인 직원의 정보가 존재하지 않는다.

 

💡 설명:

  • INSERT와 UPDATE가 실행되었지만, ROLLBACK이 실행되었기 때문에 모든 변경 사항이 취소됩니다.
  • 따라서 SELECT 실행 시, emp_id 105인 직원의 정보가 존재하지 않음.

 

문제 2: COMMIT과 DELETE

다음 SQL 실행 후 employees 테이블의 데이터 상태로 올바른 설명을 고르시오.

DELETE FROM employees WHERE department = 'HR';
SAVEPOINT sp1;
DELETE FROM employees WHERE department = 'IT';
ROLLBACK TO sp1;
COMMIT;

 

1) HR 부서와 IT 부서의 직원이 모두 삭제된다.
2) HR 부서의 직원만 삭제되고 IT 부서는 유지된다.
3) HR 부서의 직원은 유지되고 IT 부서의 직원만 삭제된다.
4) 모든 삭제가 취소되어 원래 데이터가 유지된다.

 

정답: 2) HR 부서의 직원만 삭제되고 IT 부서는 유지된다.

 

💡 설명:

  • DELETE FROM employees WHERE department = 'HR'; 실행 후 SAVEPOINT sp1 설정
  • DELETE FROM employees WHERE department = 'IT'; 실행 후 ROLLBACK TO sp1 수행 → IT 부서 삭제가 취소됨
  • 이후 COMMIT;을 실행하여 HR 부서 삭제가 확정됨

문제 3: TRUNCATE vs DELETE

다음 SQL 실행 결과를 올바르게 설명한 것은?

BEGIN TRANSACTION;
TRUNCATE TABLE employees;
ROLLBACK;
SELECT COUNT(*) FROM employees;

 

1) employees 테이블의 모든 데이터가 삭제되며 ROLLBACK 후에도 복구되지 않는다.
2) employees 테이블의 데이터가 삭제되지만 ROLLBACK 후 복구된다.
3) TRUNCATE는 DELETE와 동일하게 작동하여 ROLLBACK이 가능하다.
4) ROLLBACK 실행 후, employees 테이블의 모든 데이터가 유지된다.

 

정답: 1) employees 테이블의 모든 데이터가 삭제되며 ROLLBACK 후에도 복구되지 않는다.

 

💡 설명:

  • TRUNCATE TABLE은 **DDL(Data Definition Language)**로 간주되며, 트랜잭션 로그를 남기지 않으므로 ROLLBACK이 불가능합니다.
  • 따라서 ROLLBACK을 실행해도 데이터가 복구되지 않습니다.

 


4. Oracle과 SQL Server의 TCL(트랜잭션) 차이

 

4.1. DDL 실행 후 트랜잭션 처리 차이

구분  Oracle  SQL Server
DDL 실행 후 자동 COMMIT 수행 트랜잭션 내에서 실행 가능, 자동 COMMIT 안 함
ROLLBACK 가능 여부 ❌ 불가능 (DDL 실행 후 롤백 불가) ✅ 가능 (트랜잭션 내 DDL 실행 후 롤백 가능)
예제 CREATE TABLE, DROP TABLE 실행 시 자동 COMMIT 발생 BEGIN TRANSACTION 내에서 실행하면 ROLLBACK 가능

Oracle에서는 DDL(예: CREATE, DROP, ALTER)을 실행하면 자동으로 COMMIT이 수행되며 ROLLBACK이 불가능
SQL Server에서는 트랜잭션 내에서 DDL을 실행할 수 있으며, ROLLBACK으로 취소 가능

📌 예제

🔹 Oracle에서 DDL 실행 후 자동 COMMIT 발생

BEGIN;
DROP TABLE employees;
ROLLBACK;  -- ❌ ROLLBACK이 불가능함 (DROP TABLE 실행 시 자동 COMMIT 발생)
  • DROP TABLE을 실행하면 즉시 자동 COMMIT이 발생하여 롤백할 수 없음.

 

🔹 SQL Server에서 트랜잭션 내 DDL 실행 가능 (ROLLBACK 가능)

BEGIN TRANSACTION;
DROP TABLE employees;
ROLLBACK;  -- ✅ ROLLBACK 가능 (DDL도 트랜잭션에 포함됨)
  • BEGIN TRANSACTION을 사용하면 DDL도 트랜잭션 내에서 실행되어 ROLLBACK 가능.

4.2. TCL(트랜잭션 제어) 차이

명령어  Oracle  SQL Server
COMMIT 트랜잭션을 확정함 동일
ROLLBACK 트랜잭션을 취소함 동일
SAVEPOINT 트랜잭션의 특정 지점으로 롤백 가능 SAVE TRANSACTION을 사용하여 유사한 기능 지원
SET TRANSACTION 트랜잭션의 격리 수준 및 속성을 지정할 수 있음 SET TRANSACTION 미지원, 대신 SET ISOLATION LEVEL 사용
DDL 실행 시 트랜잭션 자동 COMMIT 발생 (ROLLBACK 불가) 트랜잭션 내에서 실행 가능, ROLLBACK 가능

Oracle은 SAVEPOINT를 지원하며 특정 지점까지 ROLLBACK 가능
SQL Server는 SAVE TRANSACTION을 사용하여 비슷한 기능 제공

 

📌 예제

🔹 Oracle에서 SAVEPOINT 사용

BEGIN;
DELETE FROM employees WHERE id = 1;
SAVEPOINT sp1;
DELETE FROM employees WHERE id = 2;
ROLLBACK TO sp1;  -- ✅ id = 1 삭제는 유지, id = 2 삭제만 취소
COMMIT;

🔹 SQL Server에서 SAVE TRANSACTION 사용

BEGIN TRANSACTION;
DELETE FROM employees WHERE id = 1;
SAVE TRANSACTION sp1;
DELETE FROM employees WHERE id = 2;
ROLLBACK TRANSACTION sp1;  -- ✅ id = 1 삭제는 유지, id = 2 삭제만 취소
COMMIT TRANSACTION;

 


4. 마무리

 

DML(Data Manipulation Language, 데이터 조작어) 데이터베이스 내의 데이터를 조작하는 SQL 명령어의 한 종류입니다. 사용자가 데이터베이스의 테이블에서 데이터를 추가(INSERT), 수정(UPDATE), 삭제(DELETE)하는 데 사용됩니다. TCL(Transaction Control Language)은 트랜잭션을 제어하는 SQL 명령어로, 데이터 변경 사항을 확정(COMMIT)하거나 취소(ROLLBACK)할 수 있도록 돕습니다.

 

DML과 TCL의 관계

  • DML(INSERT, UPDATE, DELETE) 명령어는 트랜잭션 내에서 실행되며, 변경 사항은 TCL(COMMIT, ROLLBACK)에 의해 확정 또는 취소됩니다.
  • SAVEPOINT를 사용하면 부분적인 롤백이 가능하며, SET TRANSACTION을 이용해 트랜잭션의 격리 수준을 조정할 수 있습니다.

시험 대비 핵심 포인트

  1. COMMIT을 실행하면 변경 사항이 확정되며 되돌릴 수 없습니다.
  2. ROLLBACK을 사용하면 마지막 COMMIT 이전 상태로 복구됩니다.
  3. TRUNCATE는 DML이 아닌 DDL에 속하며, ROLLBACK이 불가능합니다.
  4. MERGE는 데이터를 삽입, 수정, 삭제하는 복합적인 DML 문이며, 상황에 따라 INSERT ... ON DUPLICATE KEY UPDATE 또는 UPSERT를 고려할 수도 있습니다.

이제 DML과 TCL을 철저히 학습하고, SQLD 시험을 대비하세요! 🚀

 

 

 

 


 

💡 도움이 되셨다면 댓글과 공감 부탁드립니다! 😊
📌 더 많은 알고리즘 풀이와 프로그래밍 자료는 블로그에서 확인하세요!
✉️ 문의나 피드백은 댓글이나 이메일로 남겨주세요.

 

728x90
반응형