DML
DML(데이터 조작 언어, Data Manipulation Language)은 관계형 데이터베이스에서 데이터를 조작하기 위한 SQL 하위 언어 중 하나이다. DML은 사용자가 데이터베이스 내의 데이터를 조회, 삽입, 갱신, 삭제할 수 있도록 설계되어 있으며, 일반적으로 SELECT, INSERT, UPDATE, DELETE 명령어로 구성된다.
DML은 데이터베이스 스키마(구조)를 정의하는 DDL(Data Definition Language) 및 접근 권한을 다루는 DCL(Data Control Language)과 함께 관계형 데이터베이스 관리 시스템(RDBMS)의 핵심 구성 요소 중 하나이다.
목차
개요[편집]
데이터 조작 언어는 데이터베이스 사용자 또는 응용 소프트웨어가 컴퓨터 데이터베이스에 대해 데이터 검색, 등록, 삭제, 갱신을 위한, 데이터베이스 언어 또는 데이터베이스 언어 요소이다. 2007년 현재 가장 대중적 데이터 조작 언어는 SQL 데이터 조작 언어이다. SQL은 관계형 데이터베이스에 대해 검색 및 업데이트 등의 데이터 조작을 위해 사용된다. 다른 데이터 조작 언어로는 IMS / DL1 데이터 조작 언어와 CODASYL 데이터베이스 (IDMS 등)의 데이터 조작 언어 등이 있다. 데이터 조작 언어는 초기에는 응용 소프트웨어에 의해 사용되는 머물러 있었지만, (SQL의 출현에 따라) 데이터베이스 사용자에 따라 사용되어 갔다.
종류[편집]
DML은 데이터베이스에서 실제 데이터를 다루는 명령어 집합이다. 개발자, 데이터 분석가, DBA(데이터베이스 관리자)는 DML을 통해 다음과 같은 작업을 수행한다:
- 테이블에서 데이터를 검색 (SELECT)
- 새 데이터를 삽입 (INSERT)
- 기존 데이터를 수정 (UPDATE)
- 불필요하거나 만료된 데이터를 삭제 (DELETE)
DML은 주로 트랜잭션 내에서 실행되며, 원자성(atomicity), 일관성(consistency), 고립성(isolation), 지속성(durability)을 보장하기 위해 COMMIT 및 ROLLBACK 같은 트랜잭션 제어문과 함께 사용된다.
데이터 조작 언어는 데이터베이스 공급업체(벤더) 간에 언어 및 기능에서 많은 차이를 가지는 경향이 있다. SQL은 ANSI / ISO에서 제정된 표준이 있다. 그러나 데이터베이스 벤더들은 표준의 범위를 넘어 고유의 확장 기능을 제공하고 있다. 데이터 조작 언어에는 기본적으로 두 가지 종류가 있다.
- 선언적 데이터 조작 언어 (Declarative DML): 사용자가 무엇을(what) 원하는지만 명시하고, 실행 방식은 DBMS에 맡긴다. 예: 대부분의 SQL 사용 방식
- 절차적 데이터 조작 언어 (Procedural DML): 사용자가 어떻게(how) 데이터를 검색할지를 명시한다. 예: Oracle의 PL/SQL
SQL에서의 DML[편집]
SQL에서 DML은 데이터 변경 문(SQL-data change statements)으로 구성되며, 저장된 데이터를 수정하지만 데이터베이스 스키마나 객체(테이블, 프로시저 등)는 변경하지 않는다. 데이터베이스 객체 자체를 조작하는 작업은 데이터 정의 언어(DDL, Data Definition Language)에 속한다.
SQL에서 DML과 DQL은 구문, 데이터 타입, 표현식 등이 유사하지만 기능적으로 구분된다.
엄밀히 따지면 SELECT는 DQL에 속하지만, 일반적으로 DML로 분류된다.
SELECT ... INTO ...는 데이터 선택과 조작(생성)을 결합하므로 DML로 간주된다.
-
SELECT ... FROM ... WHERE ...
(엄밀히 말하면 DQL) -
INSERT INTO ... VALUES ...
-
UPDATE ... SET ... WHERE ...
-
DELETE FROM ... WHERE ...
예를 들어, employees 테이블에 행을 삽입하는 명령은 다음과 같다.
INSERT INTO employees (first_name, last_name, fname) VALUES ('John', 'Capita', 'xcapit00');
DML의 확장 및 변형[편집]
대부분의 SQL 데이터베이스는 절차적 프로그래밍 기능을 추가해 확장한다. 예시:
- Oracle의 PL/SQL
- IBM Db2의 SQL_PL
DML은 데이터베이스 벤더마다 문법과 기능이 다르며, ANSI에서 표준을 제정했지만 벤더별 확장 기능이 많다.
주요 DML 명령어[편집]
- SELECT
데이터를 조회하는 데 사용된다.
sql SELECT name, age FROM users WHERE age > 30;
- 다양한 조건문 (WHERE, LIKE, IN, BETWEEN)과 함께 사용할 수 있으며, 집계 함수 (COUNT, SUM, AVG)나 조인(Join) 등 고급 기능도 포함된다.
- INSERT
테이블에 새로운 레코드를 추가한다.
sql INSERT INTO users (name, age) VALUES ('Alice', 28);
- 단일 행 또는 다중 행 삽입을 지원하며, 서브쿼리 결과를 기반으로 한 삽입도 가능하다.
- UPDATE
기존 데이터 값을 수정한다.
sql UPDATE users SET age = age + 1 WHERE birthday = CURRENT_DATE;
- 조건 없이 실행할 경우 테이블의 모든 행이 영향을 받을 수 있으므로 WHERE 절 사용이 중요하다.
- DELETE
테이블에서 데이터를 삭제한다.
sql DELETE FROM users WHERE last_login < '2023-01-01';
- 삭제 후 복구가 불가능하기 때문에 트랜잭션 내에서 신중하게 사용해야 하며, TRUNCATE와는 달리 조건 기반 삭제가 가능하다.
트랜잭션과의 관계[편집]
DML 명령은 종종 데이터 무결성과 동시성을 보장하기 위해 트랜잭션과 함께 사용된다.
예:
sql BEGIN; UPDATE accounts SET balance = balance - 100 WHERE user_id = 1; UPDATE accounts SET balance = balance + 100 WHERE user_id = 2; COMMIT;
- COMMIT 이전까지는 변경 사항이 데이터베이스에 확정되지 않는다.
- ROLLBACK 명령을 통해 변경 사항을 되돌릴 수 있다.
DML과 보안[편집]
DML은 데이터 변경 권한과 밀접하게 관련되어 있어, 보안 측면에서도 주의가 필요하다. 사용자 권한이 적절히 설정되어 있지 않으면 다음과 같은 문제가 발생할 수 있다:
- 무단 데이터 삭제
- 정보 유출 (민감한 데이터 조회)
- 대량 데이터 수정으로 인한 서비스 장애
- 따라서, 역할 기반 접근 제어(RBAC)를 통해 DML 사용 권한을 제한하는 것이 중요하다.
비표준 DML 확장[편집]
일부 DBMS는 표준 SQL DML을 확장하여 자체 명령어를 제공한다. 예:
- PostgreSQL의 RETURNING 절 (INSERT ... RETURNING *)
- MySQL의 REPLACE INTO
- Oracle의 MERGE 구문 (UPSERT 구현용)
이러한 기능은 특정 DBMS에 최적화되어 있지만, 이식성(portability)에는 주의가 필요하다.
DML vs DDL vs DCL vs TCL[편집]
종류 | 설명 | 예시 |
---|---|---|
DML (Data Manipulation Language) | 데이터 조회 및 수정 | SELECT, INSERT, UPDATE, DELETE |
DDL (Data Definition Language) | 데이터 구조 정의 | CREATE, ALTER, DROP |
DCL (Data Control Language) | 권한 제어 | GRANT, REVOKE |
TCL (Transaction Control Language) | 트랜잭션 제어 | COMMIT, ROLLBACK, SAVEPOINT |
참고자료[편집]
- "Data manipulation language", Wikipedia
같이 보기[편집]