04_DML

2026. 6. 24. 15:17·SKN_AI_33/DB

DML - 데이터 조작 (INSERT / UPDATE / DELETE)

DML 명령은 트랜잭션(Transaction) 내에서 실행되므로, COMMIT 전까지는 실제 반영되지 않고 ROLLBACK으로 되돌릴 수 있다.


INSERT (삽입)

-- 기본 문법: 컬럼 순서와 값 순서 일치해야 함
INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)
VALUES (값1, 값2, ...);

-- 전체 컬럼 삽입 (컬럼 목록 생략 가능, 비권장)
INSERT INTO tbl_menu VALUES (NULL, '새메뉴', 12000, 4, 'Y');
-- AUTO_INCREMENT 컬럼에는 NULL 또는 DEFAULT 전달

-- 명시적 컬럼 지정 (권장)
INSERT INTO tbl_menu (menu_name, menu_price, category_code, orderable_status)
VALUES ('규동', 7000, 4, 'Y');

-- 여러 행 한 번에 삽입
INSERT INTO tbl_menu (menu_name, menu_price, category_code, orderable_status)
VALUES
    ('오므라이스', 9000, 4, 'Y'),
    ('카레라이스', 8000, 4, 'Y'),
    ('참치김밥',   5500, 6, 'Y');

-- SELECT 결과를 삽입 (INSERT INTO ... SELECT)
INSERT INTO tbl_menu_backup (menu_name, menu_price, category_code, orderable_status)
SELECT menu_name, menu_price, category_code, orderable_status
FROM tbl_menu
WHERE category_code = 4;

DEFAULT / NULL 삽입

INSERT INTO tbl_member (name, age, level)
VALUES ('홍길동', 20, DEFAULT);    -- DEFAULT 키워드: 기본값 사용
-- 또는 컬럼 목록에서 아예 제외해도 됨

INSERT INTO tbl_member (name, age)
VALUES ('이순신', 30);              -- level은 기본값으로 삽입

-- NULL 명시
INSERT INTO tbl_menu (menu_name, menu_price, category_code, orderable_status, description)
VALUES ('신메뉴', 9000, 4, 'Y', NULL);

UPDATE (수정)

-- 기본 문법
UPDATE 테이블명
SET    컬럼1 = 값1, 컬럼2 = 값2, ...
WHERE  조건;

-- 주의: WHERE 없으면 전체 행 수정!
-- 특정 메뉴 가격 수정
UPDATE tbl_menu
SET menu_price = 8000
WHERE menu_code = 10;

-- 여러 컬럼 동시 수정
UPDATE tbl_menu
SET
    menu_name = '신메뉴',
    menu_price = 9000,
    orderable_status = 'N'
WHERE menu_code = 10;

-- 기존 값을 기반으로 수정
UPDATE tbl_menu
SET menu_price = menu_price * 1.1    -- 10% 인상
WHERE category_code = 4;

-- 서브쿼리 활용
UPDATE tbl_menu
SET orderable_status = 'N'
WHERE category_code = (
    SELECT category_code FROM tbl_category WHERE category_name = '일식'
);

-- JOIN을 이용한 UPDATE (MySQL 전용)
UPDATE tbl_menu m
JOIN tbl_category c ON m.category_code = c.category_code
SET m.orderable_status = 'Y'
WHERE c.category_name = '한식';

DELETE (삭제)

-- 기본 문법
DELETE FROM 테이블명
WHERE  조건;

-- 주의: WHERE 없으면 전체 행 삭제!
-- 특정 행 삭제
DELETE FROM tbl_menu
WHERE menu_code = 10;

-- 조건으로 삭제
DELETE FROM tbl_menu
WHERE orderable_status = 'N';

-- 여러 조건
DELETE FROM tbl_menu
WHERE category_code = 4 AND menu_price < 5000;

-- 서브쿼리 활용
DELETE FROM tbl_menu
WHERE category_code IN (
    SELECT category_code FROM tbl_category WHERE ref_category_code IS NULL
);

DELETE vs TRUNCATE

DELETE TRUNCATE

분류 DML DDL
WHERE 사용 O X (전체만)
ROLLBACK 가능 불가능 (Auto COMMIT)
AUTO_INCREMENT 초기화 X O
속도 느림 (로그 기록) 빠름
TRUNCATE tbl_menu;    -- 전체 삭제 + AUTO_INCREMENT 1부터 재시작
DELETE FROM tbl_menu; -- 전체 삭제 (AUTO_INCREMENT 유지, ROLLBACK 가능)

주요 실수와 주의사항

-- ❌ WHERE 빠진 UPDATE/DELETE (전체 영향)
UPDATE tbl_menu SET menu_price = 0;    -- 전체 가격이 0으로!
DELETE FROM tbl_menu;                  -- 전체 삭제!

-- ✅ 실행 전 SELECT로 대상 확인 습관
SELECT * FROM tbl_menu WHERE category_code = 4;
-- 확인 후 DELETE/UPDATE로 교체

-- ❌ FK 제약으로 인한 삭제 실패
DELETE FROM tbl_category WHERE category_code = 4;
-- tbl_menu에 FK 참조가 있으면 에러!
-- → 자식 행 먼저 삭제하거나 ON DELETE CASCADE 설정 필요

 

'SKN_AI_33 > DB' 카테고리의 다른 글

06_DDL  (0) 2026.06.24
05_TCL 트랜잭션  (0) 2026.06.24
03_JOIN  (0) 2026.06.24
02_DQL SELECT  (0) 2026.06.24
01_SQL 기초와 데이터 타입  (0) 2026.06.24
'SKN_AI_33/DB' 카테고리의 다른 글
  • 06_DDL
  • 05_TCL 트랜잭션
  • 03_JOIN
  • 02_DQL SELECT
sjh4253
sjh4253
  • sjh4253
    지노의 빈노트
    sjh4253
  • 전체
    오늘
    어제
    • 분류 전체보기 (42)
      • SKN_AI_33 (42)
        • Git (3)
        • Python (8)
        • DB (6)
        • Web_Scraping (5)
        • Data_Analysis (5)
        • Machine_learning (0)
        • 회고 (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    동적크롤링
    개발공부
    데이터조회
    Selenium
    rollback
    자료형
    MySQL
    파이썬
    Python
    웹스크래핑
    데이터수집
    크롤링
    데이터베이스
    DDL
    except
    DB입문
    BeautifulSoup
    반복문
    requests
    트랜잭션
    예외처리
    데이터타입
    데이터베이스설계
    SQL
    네이버api
    DB연동
    데이터파이프라인
    python입문
    Join
    조건문
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sjh4253
04_DML
상단으로

티스토리툴바