이들은 데이터를 변경하는 DML(Data Manipulation Language) 명령입니다: **INSERT**는 행을 추가하고, **UPDATE**는 기존 행을 수정하며, **DELETE**는 행을 제거합니다. 읽기만 하는 SELECT와 달리 이들은 데이터베이스를 변경하므로 주의가 필요합니다 — 특히 절이 그렇습니다.
이들은 데이터를 변경하는 DML(Data Manipulation Language) 명령입니다: **INSERT**는 행을 추가하고, **UPDATE**는 기존 행을 수정하며, **DELETE**는 행을 제거합니다. 읽기만 하는 SELECT와 달리 이들은 데이터베이스를 변경하므로 주의가 필요합니다 — 특히 절이 그렇습니다.
WHERE-- 한 행 삽입
INSERT INTO users (name, email, age)
VALUES ('Ann', '[email protected]', 30);
-- 여러 행을 한 번에 삽입 (효율적)
INSERT INTO users (name, email)
VALUES ('Bob', '[email protected]'), ('Carol', '[email protected]');
-- 쿼리로부터 삽입
INSERT INTO archived_users SELECT * FROM users WHERE inactive = true;
컬럼과 값을 지정합니다. 여러 행을 한 문장으로 삽입하는 것이 여러 번 따로 삽입하는 것보다 효율적입니다.
UPDATE users
SET age = 31, updated_at = NOW() -- 하나 이상의 컬럼 설정
WHERE id = 5; -- ❗ 어느 행을 갱신할지
-- ❌ 위험 — WHERE 절이 없으면 테이블의 모든 행이 갱신됨!
UPDATE users SET active = false; -- 모든 user를 비활성으로 설정 😱
결정적: WHERE 절이 없는 UPDATE(또는 DELETE)는 테이블의 모든 행에 영향을 줍니다. WHERE를 잊는 것은 치명적이고 흔한 실수입니다 — 항상 두 번 확인하세요.
DELETE FROM users WHERE id = 5; -- 특정 행 삭제
DELETE FROM users WHERE inactive = true; -- 매칭되는 행 삭제
-- ❌ 위험 — WHERE가 없으면 테이블 전체 내용이 삭제됨!
DELETE FROM users;
✓ 항상 WHERE 절 포함 (정말로 모든 행에 영향을 줄 의도가 아니라면)
✓ 먼저 SELECT로 WHERE 테스트 (SELECT * WHERE ... → 영향받을 대상 확인)
✓ TRANSACTION 사용 (BEGIN ... COMMIT/ROLLBACK) — 실수를 되돌릴 수 있게
✓ DELETE vs TRUNCATE: TRUNCATE는 테이블 전체를 빠르게 비움 (더 빠르지만 행 단위가 아님,
일부 DB에서 rollback 불가, auto-increment 초기화)
INSERT, UPDATE, DELETE는 애플리케이션이 데이터를 변경하는 방법입니다. 정보를 저장하고 수정하는 모든 애플리케이션에 근본적이므로(레코드 생성, 편집, 제거), SELECT와 함께 이해하는 것은 필수적인 일상 지식입니다.
삽입(단일, 여러 개, 또는 쿼리로부터), 갱신(컬럼 설정), 행 삭제 방법을 아는 것은 모든 데이터 변경 작업에 필요합니다.
가장 결정적인 점은 누락된 WHERE 절의 위험입니다: WHERE 없는 UPDATE나 DELETE는 테이블의 모든 행에 영향을 줍니다 — 치명적이고 놀랄 만큼 흔한 실수로, 모든 데이터를 날리거나 망가뜨릴 수 있습니다.
이 위험과 안전 관행(항상 WHERE 포함, 먼저 SELECT로 조건 테스트, 실수를 되돌릴 수 있도록 transaction 사용)을 이해하는 것은 심각한 데이터 손실 사고를 예방하는 필수 지식입니다.
관련 세부 사항(효율적인 다중 행 삽입, 테이블 비우기를 위한 DELETE vs TRUNCATE)을 아는 것은 실용적인 지식을 완성합니다.
데이터 수정은 애플리케이션에 근본적이고, 누락된 WHERE 실수는 치명적이면서 흔하므로(실제 프로덕션 데이터 재해의 빈번한 원인), 이 DML 명령을 숙달하는 것 — 특히 WHERE 절과 트랜잭션 안전에 관한 결정적 규율 — 은 데이터를 변경하는 SQL을 작성하는 누구에게나 핵심적이고 반드시 알아야 할 지식입니다. 위험(되돌릴 수 없는 데이터 손실)이 커서 안전 관행이 구문만큼 중요합니다.