※ DML (Data Manipulation Language)란?
DML은 데이터베이스에 저장된 데이터를 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 명령어입니다.
즉, 데이터의 "내용"을 다루는 언어이며, SELECT처럼 조회하는 명령은 포함되지 않습니다.
| 명령어 | 설명 |
|---|---|
| INSERT | 새로운 행(Row)을 추가 |
| UPDATE | 기존 데이터 수정 |
| DELETE | 데이터 삭제 |
※ INSERT – 데이터 삽입
INSERT 문은 테이블에 새로운 데이터를 추가합니다.
-- 모든 컬럼에 데이터 삽입
INSERT INTO student VALUES (1, '지우', 'AI Engineering', 'jiwoo@example.com');
-- 특정 컬럼만 지정하여 삽입
INSERT INTO student (student_id, name, major)
VALUES (2, '민준', 'Data Science');
→ 컬럼명을 생략하면 테이블의 모든 컬럼 순서에 맞게 값을 넣어야 하며,
일부만 넣으려면 반드시 컬럼명을 명시해야 합니다.
※ UPDATE – 데이터 수정
UPDATE 문은 기존 행(Row)의 값을 수정합니다.
-- 특정 학생의 전공 변경
UPDATE student
SET major = 'Computer Science'
WHERE student_id = 2;
⚠️ 주의: `WHERE` 절을 생략하면 테이블의 모든 데이터가 수정됩니다.
-- WHERE 절이 없으면 모든 학생의 전공이 바뀜
UPDATE student SET major = 'Unknown';
※ DELETE – 데이터 삭제
DELETE 문은 조건에 맞는 행(Row)을 삭제합니다.
-- 특정 학생 삭제
DELETE FROM student
WHERE student_id = 1;
DELETE FROM student; -- 전체 데이터 삭제
※ 확장 INSERT
한 번에 여러 행을 삽입할 수도 있습니다.
INSERT INTO student (student_id, name, major)
VALUES
(3, '수현', 'AI Engineering'),
(4, '하늘', 'Data Science'),
(5, '유진', 'Statistics');
→ 대량 데이터 삽입 시 성능상 유리합니다.
※ SELECT INSERT
다른 테이블의 데이터를 SELECT하여 그대로 삽입할 수도 있습니다.
-- 졸업생 테이블로 이동
INSERT INTO alumni (student_id, name, major)
SELECT student_id, name, major
FROM student
WHERE major = 'AI Engineering';
→ 데이터 마이그레이션이나 백업 시 자주 사용됩니다.
※ INSERT IGNORE
INSERT IGNORE는 중복 키 제약 조건을 위반하더라도 오류를 발생시키지 않고 무시합니다. (MySQL 문법)
-- student_id가 중복되면 에러 대신 무시
INSERT IGNORE INTO student (student_id, name, major)
VALUES (3, '중복학생', 'Unknown');
→ 대량 데이터 적재 시 일부 중복을 무시하고 진행할 때 유용합니다.
※ 트랜잭션(Transaction)이란?
트랜잭션(Transaction)이란 데이터베이스에서 수행되는 하나의 논리적 작업 단위입니다.
여러 DML 문장을 하나로 묶어, 모두 성공하거나 모두 실패하게 하여 데이터의 일관성을 보장합니다.
트랜잭션의 4가지 성질 (ACID)
| 성질 | 설명 |
|---|---|
| Atomicity (원자성) | 모든 작업이 전부 수행되거나, 전혀 수행되지 않아야 한다. |
| Consistency (일관성) | 트랜잭션 전후로 데이터는 항상 일관된 상태여야 한다. |
| Isolation (격리성) | 동시에 실행되는 트랜잭션은 서로 간섭하지 않아야 한다. |
| Durability (지속성) | 성공적으로 수행된 트랜잭션의 결과는 영구적으로 반영된다. |
※ Commit / Rollback / Savepoint
-- 트랜잭션 시작 (MySQL은 자동 시작)
START TRANSACTION;
-- 데이터 삽입
INSERT INTO student VALUES (6, '민지', 'Math');
-- 데이터 수정
UPDATE student SET major = 'Physics' WHERE student_id = 2;
-- 변경 내용 저장
COMMIT;
-- 변경 내용 취소
ROLLBACK;
-- 부분 취소 (Savepoint 사용)
SAVEPOINT sp1;
UPDATE student SET major = 'Unknown' WHERE student_id = 3;
ROLLBACK TO sp1; -- sp1 이후의 변경만 취소
→ COMMIT은 변경 내용을 확정, ROLLBACK은 전체 취소, SAVEPOINT는 부분 취소를 지원합니다.
※ 자동 커밋과 자동 롤백
일부 DBMS(MySQL 등)는 기본적으로 Auto Commit 모드가 활성화되어 있습니다.
즉, 각 SQL 명령어가 실행될 때마다 자동으로 COMMIT이 발생합니다.
-- 자동 커밋 모드 해제
SET autocommit = 0;
-- 자동 커밋 모드 다시 활성화
SET autocommit = 1;
📌 자동 롤백: - DB 세션이 비정상 종료되거나 장애가 발생하면 현재 진행 중인 트랜잭션은 자동으로 ROLLBACK 됩니다. - 반면 정상 종료 시에는 자동 COMMIT이 이루어집니다.
'2025 현대오토에버 모빌리티 SW 스쿨(클라우드 2기) > 데이터베이스' 카테고리의 다른 글
| [Database] MongoDB 심화 활용 (0) | 2025.10.07 |
|---|---|
| [Database] NoSQL과 MongoDB 기본 (0) | 2025.10.07 |
| [Database] DDL과 제약 조건 (0) | 2025.10.07 |
| [Database] SQL 언어 완벽 정리 (3) – SubQuery와 Join (0) | 2025.10.07 |
| [Database] SQL 언어 완벽 정리 (2) – 함수와 GROUP BY (0) | 2025.10.07 |