DML
데이터 조작 언어 (Data Manipulation Language)
데이터를 조회하거나 삽입, 갱신, 삭제할 수 있다.
데이터를 조작하여 저장하는 과정은 트랜잭션(Transaction)이라고 하며, DML은 트랜잭션을 다루는 명령어라고 할 수 있다.
INSERT
테이블에 새로운 행을 삽입할 때 사용한다.
INSERT INTO table_name [(column1, column2, …)]
VALUES (val1, val2, …);
-- 예시
INSERT INTO departments (department_id, department_name, manager_id, location_id)
VALUES (271, 'Sample_Dept', 200, 1700);
예시 실행 결과
SELECT *
FROM department;
테이블 열의 순서에 맞게 값을 지정하면 column 이름을 적지 않아도 된다. 다만 오류 추적 등을 위해 column 이름은 항상 적는 것이 좋다.
INSERT INTO departments
VALUES (272, 'Sample_Dept', 200, 1700);
INSERT는 commit을 해야 데이터베이스에 영구적으로 반영된다.
UPDATE
기존 데이터를 다른 데이터로 변경할 때 사용한다.
UPDATE table_name
SET column1 = value1, [column2 = value2, ...]
WHERE 조건식;
-- 예시
UPDATE departments
SET manager_id = 201, location_id = 1800
WHERE department_name = 'Sample_Dept';
예시 실행 결과
서브 쿼리를 사용하면 대량의 데이터를 갱신할 수 있다. Oracle과 다르게 조금 복잡하니 주의해야 한다. 또한 INSERT와 동일하게 commit 해야 데이터베이스에 변경 사항이 반영된다.
UPDATE table_name
SET column1 = (
SELECT column1
FROM (
SELECT column1
FROM table_name
WHERE 조건식
) alias
),
[column2 = (
SELECT column1
FROM (
SELECT column1
FROM table_name
WHERE 조건식
) alias
), ...
]
WHERE 조건식;
-- 예시
UPDATE departments
SET manager_id = (
SELECT a.manager_id
FROM ( SELECT manager_id
FROM departments
WHERE department_id = 40
) a
),
location_id = (
SELECT b.location_id
FROM ( SELECT location_id
FROM departments
WHERE department_id = 40
) b
)
WHERE department_name = 'Sample_Dept';
DELETE
데이터를 삭제할 때 사용하며, UPDATE와 마찬가지로 WHERE 절을 사용할 수 있다. WHERE 절을 사용하지 않으면 모든 데이터가 삭제된다.
DELETE FROM table_name
[WHERE 조건식;]
-- 예시
DELETE FROM departments
WHERE department_name = 'Sample_Dept';
INSERT, UPDATE와 마찬가지로 commit 해야 데이터베이스에 반영된다.
참고 문서
https://www.w3schools.in/mysql/ddl-dml-dcl