모든 강의를 무료로 볼 수 있어요. 회원가입 없이도 학습 가능합니다.

19강 / 전체 24강

데이터 추가·수정·삭제

8분 읽기 조회 0

INSERT로 행을 추가하고, UPDATE로 값을 수정하고, DELETE로 행을 제거하는 DML 3대 명령문과 WHERE 누락의 위험성을 익힙니다.

🎯 학습 목표

이 강을 마치면 테이블에 새 행을 추가하는 INSERT, 기존 값을 변경하는 UPDATE, 행을 삭제하는 DELETE를 올바르게 작성할 수 있습니다. 특히 WHERE 절 누락이 전체 테이블을 수정·삭제하는 치명적인 실수로 이어진다는 것을 이해하고, 안전하게 DML을 실행하는 습관을 갖출 수 있게 됩니다.

💡 DML — 데이터 조작 언어

이 섹션에서는 SQL 명령문의 분류와 DML의 위치를 살펴보겠습니다.

SQL 명령문은 목적에 따라 크게 세 가지로 분류됩니다. 지금까지 배운 SELECT는 DQL(Data Query Language)로 데이터를 조회합니다. CREATE TABLE처럼 구조를 정의하는 명령은 DDL(Data Definition Language)이며 20강에서 다룹니다. 이번 강에서 배우는 INSERT, UPDATE, DELETE는 DML(Data Manipulation Language)로 실제 데이터를 조작합니다.

중요한 차이점이 있습니다. SELECT는 데이터를 변경하지 않으므로 실수해도 다시 실행하면 됩니다. 반면 UPDATE와 DELETE는 실행 즉시 데이터가 변경되고 되돌리기 어렵습니다. 트랜잭션(BEGIN/ROLLBACK)을 활용하면 취소할 수 있지만, 이를 모르는 상태에서는 매우 조심해야 합니다.

➕ INSERT — 행 추가

이 섹션에서는 테이블에 새 행을 삽입하는 INSERT 문을 살펴보겠습니다.

INSERT INTO 문은 테이블에 새 행을 추가합니다. 기본 문법은 두 가지입니다.

-- 방법 1: 열 이름 명시 (권장)
INSERT INTO 테이블명 (열1, 열2, 열3)
VALUES (값1, 값2, 값3);

-- 방법 2: 열 이름 생략 (열 순서대로 모두 입력)
INSERT INTO 테이블명
VALUES (값1, 값2, 값3, 값4, 값5);

방법 1이 권장됩니다. 나중에 테이블에 열이 추가되어도 영향을 받지 않고, 어떤 열에 어떤 값을 넣는지 명확하게 알 수 있기 때문입니다.

-- members 테이블에 새 회원 추가
INSERT INTO members (member_id, name, email, grade, join_date)
VALUES (7, '신규회원', 'new@example.com', 'REGULAR', '2024-06-15');

-- 추가 확인
SELECT * FROM members WHERE member_id = 7;

INSERT 후 SELECT로 추가된 행을 확인합니다. grade에 NULL을 허용하는 열이라면 생략할 수 있습니다.

-- grade를 생략 (NULL로 입력됨)
INSERT INTO members (member_id, name, email, join_date)
VALUES (8, '등급없는회원', 'nograde@example.com', '2024-06-16');

여러 행을 한 번에 삽입할 수 있습니다. 콤마로 구분해 VALUES를 여러 개 나열합니다.

-- 여러 행 한 번에 삽입
INSERT INTO books (book_id, title, author, price, stock, category)
VALUES
  (8, '파이썬 머신러닝', '오렐리앙 제롱', 45000, 8, 'IT'),
  (9, '이것이 자바다',   '신용권',        32000, 12, 'IT');

한 번의 INSERT로 두 권의 도서가 추가됩니다. 다중 행 INSERT는 단일 행 INSERT를 반복하는 것보다 성능면에서 효율적입니다.

✏️ UPDATE — 데이터 수정

이 섹션에서는 기존 행의 값을 변경하는 UPDATE 문과 WHERE 누락의 위험성을 살펴보겠습니다.

UPDATE 문은 기존 행의 하나 이상의 열 값을 변경합니다.

UPDATE 테이블명
SET 열1 = 새값1, 열2 = 새값2
WHERE 조건;

⚠️ WHERE 절을 반드시 명시해야 합니다. WHERE를 생략하면 테이블의 모든 행이 수정됩니다.

-- 7번 회원의 등급을 VIP로 업데이트
UPDATE members
SET grade = 'VIP'
WHERE member_id = 7;

-- 확인
SELECT member_id, name, grade FROM members WHERE member_id = 7;
-- 여러 열 동시 수정
UPDATE members
SET grade = 'PREMIUM',
    email = 'new_email@example.com'
WHERE member_id = 8;
-- 조건부 업데이트: 재고가 5개 이하인 도서의 재고를 10으로 보충
UPDATE books
SET stock = 10
WHERE stock <= 5;

-- 확인: 수정된 행 수 파악
SELECT title, stock FROM books WHERE stock = 10;

UPDATE의 SET 절에 계산식도 사용할 수 있습니다.

-- 모든 IT 도서 가격을 5% 인상
UPDATE books
SET price = ROUND(price * 1.05, 0)
WHERE category = 'IT';

-- 주문이 완료된 주문의 수량 기록 (이미 완료된 것은 변경 방지)
UPDATE orders
SET quantity = quantity + 1
WHERE order_id = 3
  AND status = 'PENDING';  -- PENDING인 경우만 수정

WHERE 절에 여러 조건을 결합해 의도하지 않은 행이 수정되지 않도록 정밀하게 제어합니다.

🗑️ DELETE — 행 삭제

이 섹션에서는 특정 행을 삭제하는 DELETE 문과 주의사항을 살펴보겠습니다.

DELETE 문은 테이블에서 행을 삭제합니다. UPDATE와 마찬가지로 WHERE 절 누락 시 전체 행이 삭제됩니다.

DELETE FROM 테이블명
WHERE 조건;
-- 8번 회원 삭제
DELETE FROM members
WHERE member_id = 8;

-- 확인
SELECT COUNT(*) FROM members;  -- 7명으로 줄었는지 확인
-- 취소된 주문 모두 삭제
DELETE FROM orders
WHERE status = 'CANCEL';

-- 확인: 취소 주문이 남아있지 않은지 확인
SELECT COUNT(*) FROM orders WHERE status = 'CANCEL';

DELETE는 행만 삭제하고 테이블 구조는 그대로 유지됩니다. 테이블 자체를 삭제하려면 20강에서 배울 DROP TABLE을 사용합니다. 모든 행을 빠르게 삭제하되 테이블 구조는 유지하려면 TRUNCATE TABLE(SQLite는 DELETE FROM 테이블명으로 대체)을 씁니다.

🛡️ 안전한 DML 실행 습관

이 섹션에서는 UPDATE와 DELETE를 실수 없이 안전하게 실행하는 실무 습관을 살펴보겠습니다.

DML 실수는 되돌리기 어렵습니다. 다음 순서를 습관으로 만들면 대부분의 실수를 예방할 수 있습니다.

첫째, UPDATE/DELETE 전에 반드시 SELECT로 대상 행을 먼저 확인합니다.

-- 1단계: SELECT로 영향받을 행 확인
SELECT member_id, name, grade FROM members WHERE grade = 'REGULAR';

-- 확인 후 2단계: UPDATE 실행
UPDATE members SET grade = 'PREMIUM' WHERE grade = 'REGULAR';

둘째, 트랜잭션을 활용합니다. BEGIN으로 트랜잭션을 시작하고, 결과를 확인한 후 COMMIT(확정) 또는 ROLLBACK(취소)합니다.

BEGIN;  -- 트랜잭션 시작

UPDATE orders SET status = 'DONE' WHERE status = 'PENDING';

-- 변경 결과 확인
SELECT status, COUNT(*) FROM orders GROUP BY status;

-- 문제없으면 COMMIT, 문제있으면 ROLLBACK
COMMIT;   -- 확정 (또는 ROLLBACK; 으로 취소)

셋째, WHERE 조건에 PK(기본키)를 포함해 정확히 1개 행만 수정될 것을 보장합니다. WHERE member_id = 7처럼 PK를 조건으로 쓰면 실수로 여러 행이 수정될 위험이 없습니다.

📝 핵심 요약

이번 강에서 배운 내용을 정리하겠습니다.

명령문역할위험 포인트
INSERT INTO … VALUES새 행 추가NOT NULL 열 누락, 중복 PK
UPDATE … SET … WHERE기존 열 값 수정WHERE 누락 → 전체 행 수정!
DELETE FROM … WHERE행 삭제WHERE 누락 → 전체 행 삭제!

DML 황금 규칙: UPDATE와 DELETE는 항상 WHERE를 먼저 SELECT로 검증한 후 실행하라. 다음 20강에서는 테이블 자체를 만들고 수정하고 삭제하는 DDL을 배웁니다. CREATE TABLE로 직접 테이블 구조를 설계하고, ALTER TABLE로 열을 추가하거나 수정하는 방법을 익히게 됩니다.

관련 주제

  • INSERT
  • UPDATE
  • DELETE
  • DML
  • WHERE 절 누락
  • 트랜잭션
  • ROLLBACK
  • DQL·DDL·DML 구분
  • 개발·프로그래밍
  • 개발·프로그래밍 강의
  • SQL·데이터베이스 입문 24강
  • 무료강의
  • 무료 온라인 강의
  • NUGUNA
  • 누구나

📚 시리즈 전체 공유

SQL·데이터베이스 입문 24강

이 강의가 속한 시리즈는 총 24강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.

댓글

0/1000

불러오는 중...