SQL 기본 개념과 명령어 유형 | DDL, DML, DCL, TCL
2025. 1. 31. 10:29ㆍDatabase/SQL
1. SQL이란?
- Structured Query Language, 구조화된 질의 언어
- 데이터베이스에서 데이터를 정의하고 조작하는 언어로 주로 데이터를 삽입, 조회, 수정, 삭제, 관리하는 데 사용되며, 관계형 데이터베이스(RDBMS)에서 필수적으로 활용된다.
2. SQL의 특징
- 데이터베이스 관리 용도: 데이터를 저장, 검색, 수정, 삭제하는 모든 작업 가능
- 관계형 데이터베이스(RDBMS)에서 사용: MySQL, MariaDB, PostgreSQL, Oracle 등에서 활용
- 명령어가 직관적: SELECT, INSERT, UPDATE, DELETE 같은 사람이 이해하기 쉬운 명령어 사용
- 표준화된 언어: ANSI(미국 표준 협회)와 ISO(국제 표준 기구)에서 공식 표준으로 정의
- 하지만 각 RDBMS 공급업체들은 SQL 표준을 바탕으로 자신들의 특화된 기능을 추가하거나 최적화를 한다.
- 확장된 기능, 데이터 타입, 문법 차이 등이 존재한다.
- 트랜잭션 지원: 데이터의 일관성을 유지하기 위해 COMMIT, ROLLBACK 등의 트랜잭션 제어 가능
- SQL 구문 규칙
- SQL 쿼리문의 끝에는 세미콜론(;)을 붙인다.
- 명령어(예약어)의 대소문자는 구별하지 않음 (대문자로 쓰는 것을 권장)
- 단, 데이터 값 (예: 문자열, 테이블 이름, 컬럼 이름 등)은 대소문자를 구분한다.
- SQL에서 문자열은 작은따옴표(')로 감싼다.
- SQL에서 사용하는 키워드(예: SELECT, INSERT, UPDATE 등)는 예약어이기 때문에 테이블 이름이나 컬럼 이름으로 사용하지 않는 것이 좋다. 단, 사용해야한다면 예약어는 백틱(``)으로 감쌀 수 있음.
- 주석은 -- (한 줄) 또는 /* */ (여러 줄)로 작성.
- NULL 값을 다룰 때는 IS NULL 또는 IS NOT NULL을 사용.
3. SQL 명령어 유형
분류 | 설명 | 주요 명령어 |
DDL | 데이터베이스 구조 변경 | CREATE, ALTER, DROP, TRUNCATE |
DML | 데이터 삽입/조회/수정/삭제 | INSERT, SELECT, UPDATE, DELETE |
DCL | DB 접근 권한 제어 | GRANT, REVOKE |
TCL | 트랜젝션 제어 | COMMIT, ROLLBACK, SAVEPOINT |
DDL (Data Definition Language, 데이터 정의어)
- 데이터베이스의 구조(스키마)를 정의하는 명령어
- 테이블을 만들거나 변경할 때 사용된다.
- 데이터 자체를 다루는 게 아니라 DB 구조를 조작하는 것이 핵심이다.
- DDL 명령어
- CREATE: 테이블, 데이터베이스, 뷰 등을 생성
- ALTER: 기존 테이블의 구조 변경 (컬럼 추가, 삭제 등)
- DROP: 테이블이나 데이터베이스 삭제
- TRUNCATE: 테이블의 모든 데이터 삭제 (구조는 유지)
-- ❗DDL은 자동으로 COMMIT 처리됨
-- 실행하면 롤백(취소)이 불가능하다.
-- 새로운 테이블 생성 (CREATE)
-- AUTO_INCREMENT: INSERT 시 PRIMARY키에 해당하는 컬럼에 자동으로 번호를 발생(중복되지 않게)시켜 저장할 수 있다.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT
);
-- 테이블에 새로운 컬럼 추가 (ALTER)
ALTER TABLE users ADD email VARCHAR(100);
-- 테이블 삭제 (DROP)
DROP TABLE users;
-- 테이블의 데이터만 삭제 (TRUNCATE)
TRUNCATE TABLE users;
DML (Data Manipulation Language, 데이터 조작어)
- 데이터를 삽입/조회/수정/삭제하는 명령어
- 테이블 안의 데이터를 다룰 때 사용됨.
- DB의 구조는 변경하지 않고 데이터 자체를 조작하는 것이 핵심!
- DML은 트랜잭션이 적용됨 → COMMIT을 해야 실제 반영되고, ROLLBACK으로 취소 가능!
- DML 명령어
- INSERT: 데이터 삽입
- SELECT: 데이터 조회
- UPDATE: 데이터 수정
- DELETE: 데이터 삭제
- REPLACE: 데이터 교체
-- ❗ DML은 트랜잭션이 적용됨
-- COMMIT을 해야 실제 반영되고, ROLLBACK으로 취소 가능!
-- 데이터 삽입 (INSERT)
INSERT INTO users (id, name, age) VALUES (1, 'LEE', 25);
-- 데이터 조회 (SELECT)
SELECT * FROM users WHERE age > 20;
-- 데이터 수정 (UPDATE)
UPDATE users SET age = 26 WHERE id = 1;
-- 데이터 삭제 (DELETE)
DELETE FROM users WHERE id = 1;
-- 데이터 교체 (REPLACE)
-- INSERT INTO users VALUES (1, 'LEE', 25); -- 에러 발생 (이미 존재하는 데이터)
REPLACE INTO users VALUES (1, 'LEE', 30); -- 기존의 데이터에 덮어쓰기, WHERE 구문 없이 UPDATE가 가능
DCL (Data Control Language, 데이터 제어어)
- DCL은 데이터베이스의 접근 권한을 관리하는 명령어
- 유저별로 테이블이나 DB에 대한 접근 권한을 부여하거나 회수하는 역할을 한다.
- 주로 DB 관리자(DBA) 가 사용하고, 일반적인 CRUD 작업보다는 보안과 접근 제어에 초점이 맞춰져 있음.
- MySQL에서는 권한이 적용되려면 FLUSH PRIVILEGES; 명령어를 실행해야 하는 경우도 있음.
- DCL 명령어
- GRANT: 특정 사용자에게 권한을 부여
- REVOKE: 특정 사용자에게 부여된 권한을 회수
-- users 테이블에 대해 SELECT, INSERT 권한을 사용자 LEE 부여
GRANT SELECT, INSERT ON users TO LEE;
-- users 테이블에 대한 모든 권한(SELECT, INSERT, UPDATE, DELETE 등)을 LEE에게 부여
GRANT ALL PRIVILEGES ON users TO LEE;
-- users 테이블에 대한 INSERT 권한을 LEE에게서 회수
REVOKE INSERT ON users FROM LEE;
-- users 테이블에 대한 모든 권한을 회수
REVOKE ALL PRIVILEGES ON users FROM LEE;
TCL (Transaction Control Language, 트랜잭션 제어어)
- TCL (트랜잭션 제어어) 는 트랜잭션을 관리하는 명령어이다.
- TRANSACTION: 데이터 베이스에서 한 번에 수행되는 작업의 단위.
- DML(INSERT, UPDATE, DELETE) 작업을 수행한 후, 변경 사항을 확정(저장)하거나 취소(롤백)하는 역할을 한다.
- TCL은 DML과 함께 동작하지만, DML이 아님
- DDL(CREATE, DROP, TRUNCATE) 명령어는 자동 COMMIT 되므로 ROLLBACK 불가능
- MySQL은 기본적으로 자동 커밋 설정이 되어 있어 롤백이 안된다. 롤백을 하기 위해서는 자동 커밋 설정을 해제해 주어야 한다. ( SET autocommit = 1; 또는 SET autocommit = ON;)
- TCL 명령어
- COMMIT: 변경 사항을 영구적으로 저장
- ROLLBACK: 변경 사항을 되돌림(취소)
- SAVEPOINT: 특정 시점(저장점)을 설정하여 부분 롤백 가능
-- 1. COMMIT
START TRANSACTION; -- 트랜잭션 시작
INSERT INTO users (id, name) VALUES (1, 'Lee');
UPDATE users SET name = 'Lee' WHERE id = 1;
COMMIT; -- 변경 사항 확정 (데이터가 영구 저장됨, 이후 rollback 불가)
-- 2. ROLLBACK
START TRANSACTION;
DELETE FROM users WHERE id = 1; -- 데이터 삭제
ROLLBACK; -- 실행 취소 (삭제된 데이터 복구)
-- 3. SAVEPOINT
START TRANSACTION;
INSERT INTO users (id, name) VALUES (2, 'Alice');
SAVEPOINT sp1; -- 저장점 설정
UPDATE users SET name = 'Alicia' WHERE id = 2;
ROLLBACK TO sp1; -- sp1 저장점 이후 변경 사항 취소 (Alice로 복원)
COMMIT; -- 최종 확정