이번 글에서는 DDL, DCL, DML에 대해서 알아보도록 하겠습니다.
DDL
DDL은 데이터베이스의 구조를 정의하는 데 사용되는 SQL의 명령어 집합입니다.
테이블, 인덱스, 스키마 등 데이터베이스 객체를 생성, 변경, 삭제하는 작업을 수행합니다.
DDL 에는 다음과 같은 구문이 있습니다.
- CREATE
- 테이블, 데이터베이스, 인덱스 등을 생성
CREATE TABLE 학생 (
학번 INT PRIMARY KEY,
이름 VARCHAR(50),
나이 INT
);
- ALTER
- 기존 테이블 또는 객체를 수정
ALTER TABLE 학생 ADD 학과 VARCHAR(50);
- DROP
- 테이블, 데이터베이스 등을 삭제
DROP TABLE 학생;
- TRUNCATE
- 테이블의 데이터를 모두 삭제(구조는 유지)
TRUNCATE TABLE 학생;
DCL
DCL은 데이터베이스의 권한과 보안을 제어하는 데 사용되는 SQL의 명령어 집합입니다.
특정 사용자나 역할에 대해 접근 권한을 부여하거나 회수합니다.
DCL 에는 다음과 같은 구문이 있습니다.
- GRANT
- 사용자가 데이터베이스 객체에 접근할 수 있는 권한 부여
- 아래의 예시는 사용자에게 학생 테이블에 대한 SELECT, INSERT 권한을 부여하는 명령입니다.
GRANT SELECT, INSERT ON 학생 TO 사용자;
- REVOKE
- 부여된 권한을 회수
REVOKE INSERT ON 학생 FROM 사용자;
- COMMIT
- 트랜잭션 작업을 확정
COMMIT;
- ROLLBACK
- 트랜잭션 작업을 취소
ROLLBACK;
DML
DML은 데이터베이스의 데이터를 조작하는 데 사용되는 SQL의 명령어 집합입니다.
테이블에 저장된 데이터를 추가, 수정, 삭제, 검색하는 작업을 수행합니다.
DML은 트랜잭션 처리와 관련이 있어, COMMIT과 ROLLBACK을 통해 작업을 확정하거나 취소 가능합니다.
DML 에는 다음과 같은 구문이 있습니다.
- SELECT:
- 데이터를 검색하고 조회하는 명령.
SELECT * FROM 학생 WHERE 나이 > 20;
- INSERT:
- 테이블에 데이터를 삽입하는 명령.
INSERT INTO 학생 (학번, 이름, 나이) VALUES (1, '홍길동', 21);
- UPDATE:
- 테이블의 데이터를 수정하는 명령.
UPDATE 학생 SET 나이 = 22 WHERE 학번 = 1;
- DELETE:
- 테이블의 데이터를 삭제하는 명령.
DELETE FROM 학생 WHERE 학번 = 1;
이렇게 DDL, DCL, DML에 대해서 알아보았습니다.
근데 DDL의 DROP, TRUNCATE, 그리고 DML의 DELETE는 데이터 삭제와 관련된 명령어인데 어떤 차이가 있을까요?
- DROP
- 데이터베이스 객체(테이블, 데이터베이스 등) 구조 자체를 포함하여 완전히 삭제하는 명령어
- 삭제된 객체는 복구 불가능
- ROLLBACK 불가 (트랜잭션 지원 안 함)
- TRUNCATE
- 테이블의 데이터를 전부 삭제하지만, 테이블 구조는 유지하는 명령어
- 테이블을 초기화하는 것
- ROLLBACK 불가 (트랜잭션 지원 안 함)
- DELETE
- 테이블에서 특정 데이터(행)를 삭제하는 명령어
- 조건 없이 실행하면 모든 행이 삭제되지만, 구조는 유지
- ROLLBACK 가능 (트랜잭션을 지원)
CASCADE
CASCADE란 외래키 제약 조건을 설정할 때, 참조된 데이터가 삭제되거나 업데이트될 때 자동으로 관련 데이터를 처리하도록 지정하는 옵션입니다. -> 이는 참조 무결성을 유지하는 데 도움을 줍니다.
- ON DELETE CASCADE
- 참조된 데이터가 삭제되면, 해당 데이터를 참조하는 외래키 데이터도 자동으로 삭제
- 아래 쿼리는 학생테이블에서 학번이 삭제되면, 수강테이블의 관련 데이터도 삭제
CREATE TABLE 수강 (
수강번호 INT PRIMARY KEY,
학번 INT,
FOREIGN KEY (학번) REFERENCES 학생(학번) ON DELETE CASCADE
);
- ON UPDATE CASCADE
- 참조된 기본키 값이 업데이트되면, 외래키 값도 자동으로 업데이트
- 아래 쿼리는 학생테이블에서 학번이 수정되면, 수강테이블의 관련 데이터도 수정
CREATE TABLE 수강 (
수강번호 INT PRIMARY KEY,
학번 INT,
FOREIGN KEY (학번) REFERENCES 학생(학번) ON UPDATE CASCADE
);
- ON DELETE SET NULL
- 참조된 기본키 값이 삭제되면, 외래키 값이 NULL로 설정
CREATE TABLE 부모 (
id INT PRIMARY KEY
);
CREATE TABLE 자식 (
id INT PRIMARY KEY,
부모_id INT,
FOREIGN KEY (부모_id) REFERENCES 부모(id)
ON DELETE SET NULL
);
'CS > 데이터베이스' 카테고리의 다른 글
SQL Injection과 안티패턴 (0) | 2025.01.08 |
---|---|
다양한 쿼리를 알아보자. (0) | 2025.01.07 |
SQL 이란? (0) | 2025.01.07 |
MySQL과 InnoDB (1) | 2025.01.03 |
키는 뭘까? (0) | 2025.01.02 |