SQL 기본 개념과 명령어 유형 | DDL, DML, DCL, TCL

2025. 1. 31. 10:29Database/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;  -- 최종 확정