| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- dreamhack
- AWS
- C
- Amazon S3
- network
- 리버싱
- 버퍼 오버플로우
- 프로그래머스
- AWS 침해 사고 사례 분석
- TryHackMe
- terraform
- 악성코드분석
- CrackMe 문제
- reversing
- crackme
- 드림핵
- AWS 사고 사례 분석
- 악성코드 분석
- sql
- reversing.kr
- Database
- 운영체제
- programmers
- 네트워크
- AWS 3 Tier Architecture
- AWS 침해사고 사례 분석
- 파일 시스템
- AWS 보안 아키텍처 분석
- operating system
- python
- Today
- Total
lhywk 님의 블로그
[DB] SQL - DDL, DML, DCL, TCL 본문
SQL의 분류
SQL(Structured Query Language)은 관계형 데이터베이스를 다루기 위한 표준화된 언어이다. SQL은 수행하는 역할에 따라 크게 네 가지로 분류할 수 있다.
1. DDL (데이터 정의어)
DDL(Data Definition Language)은 데이터베이스의 구조, 즉 스키마를 정의하고 변경하는 데 사용되는 언어이다. 테이블이나 인덱스 같은 데이터베이스 객체를 만들고 수정하고 삭제하는 명령어들이 여기에 속한다.
CREATE
CREATE는 새로운 데이터베이스 객체를 생성하는 명령어이다. 테이블을 만드는 경우를 예로 들면 다음과 같은 형태로 사용한다.
CREATE TABLE 학생 (
학번 VARCHAR(10) PRIMARY KEY,
이름 VARCHAR(20) NOT NULL,
학년 INT,
학과 VARCHAR(30)
);
이 명령어는 릴레이션 스키마를 실제로 데이터베이스에 정의하는 작업이라고 볼 수 있다. PRIMARY KEY나 NOT NULL 같은 키워드는 5부에서 다뤘던 기본키 지정과 개체 무결성을 코드로 표현한 것이다.
ALTER
ALTER는 이미 만들어진 테이블의 구조를 변경하는 명령어이다. 새로운 컬럼을 추가하거나 기존 컬럼을 수정하거나 삭제할 때 사용한다.
ALTER TABLE 학생 ADD 이메일 VARCHAR(50);
DROP
DROP은 데이터베이스 객체 자체를 완전히 삭제하는 명령어이다. 테이블을 DROP하면 테이블의 구조와 그 안에 저장된 데이터가 모두 사라진다.
DROP TABLE 학생;
TRUNCATE
TRUNCATE는 테이블의 구조는 그대로 유지하면서 그 안에 저장된 데이터만 모두 삭제하는 명령어이다. DROP과 달리 테이블 자체는 남아있기 때문에, 이후에 다시 데이터를 채워 넣을 수 있다.
TRUNCATE TABLE 학생;
2. DML (데이터 조작어)
DML(Data Manipulation Language)은 테이블에 저장된 실제 데이터를 검색하고 삽입하고 수정하고 삭제하는 데 사용되는 언어이다. 데이터베이스를 사용하면서 가장 빈번하게 사용하게 되는 명령어들이 여기에 속한다.
SELECT
SELECT는 테이블에서 데이터를 검색하는 명령어이다. SQL 중에서도 가장 많이 사용되는 명령어이며, 관계대수의 셀렉션과 프로젝션 연산이 바로 이 SELECT 문법 안에 함께 녹아 있다.
SELECT 이름, 학년 FROM 학생 WHERE 학년 = 2;
이 질의문에서 SELECT 뒤에 나열된 이름, 학년은 프로젝션(원하는 속성만 추출)에 해당하고, WHERE 뒤에 나오는 조건은 셀렉션(조건을 만족하는 튜플만 추출)에 해당한다. 즉 관계대수로 표현하면 π이름,학년(σ학년=2(학생))과 동일한 의미를 가진다.
INSERT
INSERT는 테이블에 새로운 튜플(행)을 삽입하는 명령어이다.
INSERT INTO 학생 (학번, 이름, 학년, 학과)
VALUES ('2024004', '최유진', 1, '컴퓨터공학');
UPDATE
UPDATE는 테이블에 이미 저장된 데이터를 수정하는 명령어이다. 보통 WHERE 조건과 함께 사용해서, 조건을 만족하는 특정 튜플만 수정 대상으로 지정한다.
UPDATE 학생 SET 학년 = 3 WHERE 학번 = '2024001';
DELETE
DELETE는 테이블에서 튜플을 삭제하는 명령어이다. 마찬가지로 WHERE 조건을 함께 사용해서 삭제할 대상을 지정하며, WHERE 조건을 생략하면 테이블의 모든 튜플이 삭제된다.
DELETE FROM 학생 WHERE 학번 = '2024004';
DELETE는 TRUNCATE와 비슷하게 데이터를 지우지만, DELETE는 한 튜플씩 삭제 조건을 검사하면서 지우고 되돌릴 수 있는 기록을 남기는 반면, TRUNCATE는 테이블 전체를 통째로 비우는 방식이라는 차이가 있다.
3. DCL (데이터 제어어)
DCL(Data Control Language)은 데이터베이스에 대한 접근 권한을 관리하는 언어이다. 어떤 사용자가 어떤 데이터에 접근할 수 있는지를 통제함으로써 데이터베이스의 보안을 지키는 역할을 한다.
GRANT
GRANT는 특정 사용자에게 데이터베이스 객체에 대한 권한을 부여하는 명령어이다.
GRANT SELECT, INSERT ON 학생 TO 사용자A;
이 명령어는 사용자A에게 학생 테이블에 대한 조회와 삽입 권한을 부여한다.
REVOKE
REVOKE는 이미 부여된 권한을 다시 회수하는 명령어이다.
REVOKE INSERT ON 학생 FROM 사용자A;
이 명령어는 사용자A에게 부여했던 삽입 권한만 회수한다.
4. TCL (트랜잭션 제어어)
TCL(Transaction Control Language)은 트랜잭션의 흐름을 제어하는 언어이다. 트랜잭션이라는 개념 자체는 이후 트랜잭션과 동시성 제어를 다루는 글에서 ACID 속성과 함께 자세히 설명하겠지만, 간단히 말하면 여러 개의 데이터 조작 작업을 하나의 작업 단위로 묶은 것을 의미한다.
COMMIT
COMMIT은 트랜잭션 안에서 수행한 변경 사항을 데이터베이스에 영구적으로 반영하는 명령어이다.
COMMIT;
ROLLBACK
ROLLBACK은 트랜잭션 안에서 수행한 변경 사항을 취소하고, 트랜잭션이 시작되기 이전 상태로 되돌리는 명령어이다.
ROLLBACK;
예를 들어 계좌 이체처럼 여러 단계의 작업이 묶여서 진행되는 상황에서, 중간에 한 단계라도 실패하면 ROLLBACK으로 전체 작업을 취소해서 데이터의 일관성을 지킬 수 있다.
'Database' 카테고리의 다른 글
| [DB] 트랜잭션과 동시성 제어 - ACID, 격리 수준, 락 (0) | 2026.06.24 |
|---|---|
| [DB] SQL 활용 - JOIN, 서브쿼리, GROUP BY, 윈도우 함수 (0) | 2026.06.24 |
| [DB] 정규화 - 이상 현상부터 BCNF까지 (0) | 2026.06.24 |
| [DB] 데이터 모델링 - ERD, 개체와 속성, 관계 (0) | 2026.06.24 |
| [DB] 관계대수 - 셀렉션, 프로젝션, 집합연산, 조인, 디비전 (0) | 2026.06.18 |