DML은 Data Manipulation Language의 약자로, DDL에서 정의한 대로 데이터를 입력하고(INSERT), 수정하고(UPDATE), 삭제하는(DELETE) 명령어이다.
SELECT를 DML이라고 하는 블로그나 게시글이 간혹 있는데, SELECT는 DML이 아니라 DQL(Data Query Language)로 따로 분류한다.
✅ 1. INSERT
테이블에 데이터를 입력하는 명령어이다.
만약 테이블의 특정 몇 개의 컬럼에 데이터를 넣고 싶다면 아래와 같이 작성하면 된다.
이때, 데이터가 입력되지 않은 컬럼은
NULL
값이 들어간다. 단, PK
혹은 NOT NULL
제약조건이 있는 컬럼은 NULL
값을 입력할 수 없으므로 에러가 발생한다.INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) VALUES (데이터1, 데이터2, ...);
만약 테이블 전체 컬럼에 대해 데이터를 넣고 싶다면, 컬럼명을 생략해도 된다.
INSERT INTO 테이블명 VALUES (전체 컬럼에 입력될 데이터 리스트);
✅ 2. UPDATE
이미 저장된 데이터를 수정할 때 사용하는 명령어이다.
단일 컬럼을 수정하고 싶을 땐 아래와 같이 한다.
단,
WHERE
절이 없다면 테이블의 모든 데이터가 수정되므로 주의해야 한다!!!UPDATE 테이블명 SET 컬럼명 = 새로운데이터 (WHERE 수정할 데이터에 대한 조건);
만약, 여러 컬럼에 대해 수정을 하고 싶다면
SET
절에 ,
로 이어서 작성할 수 있다.UPDATE 테이블명 SET 컬럼명1 = 데이터1, 컬럼명2 = 데이터2, ... (WHERE 수정할 데이터에 대한 조건);
✅ 3. DELETE
이미 저장된 데이터를 삭제할 때 사용하는 명령어이다.
DELETE
도 UPDATE
와 마찬가지로 WHERE
절이 없다면 전체 행이 삭제되므로 주의해야 한다 !!DELETE FROM 테이블명 (WHERE 삭제할 데이터에 대한 조건);
DELETE
는 COMMIT
전에 ROLLBACK
이 가능하다. 따라서, 실수를 했다면 되돌릴 수 있지만 그만큼 시스템에 부하가 발생한다.만약
WHERE
절 없이 테이블 전체 데이터를 삭제하고 싶다면, DELETE
가 아닌 TRUNCATE
가 더 적절할 수 있다.TRUNCATE
는 DELETE
와 다르게 별도의 로그를 남기지 않아 ROLLBACK
이 불가능한 대신, 시스템 부하가 적다. 만약 테이블의 전체 데이터를 삭제하는 것이 확실하다면 TRUNCATE
를 사용하자!TRUNCATE TABLE 테이블명;
✅ 4. MERGE
테이블에 새로운 데이터를 입력하거나 이미 저장되어 있는 데이터에 대한 변경 작업을 한 번에 할 수 있도록 해주는 명령어이다.
MERGE
를 사용하면 하나의 쿼리문으로 INSERT
, UPDATE
, DELETE
작업을 수행할 수 있다.만약, 테이블에 데이터가 존재하지 않으면
INSERT
를 수행하고, 존재한다면 UPDATE
를 수행하고 싶을 때 아래와 같이 작성할 수 있다.MERGE INTO emp a USING dual // 단일 테이블 사용 시 ON (a.empno = 7788) WHEN MATCHED THEN UPDATE SET a.deptno = 20 WHEN NOT MATCHED THEN INSERT (a.empno, a.ename, a.deptno) VALUES (7788, 'SCOTT', 20);
Share article