목록

데이터 정의어(DDL, Data Definition Language)는 말 그대로 데이터베이스의 구조를 정의하는 명령어를 의미합니다.
즉, 테이블이나 데이터베이스와 같은 객체를
생성하고, 수정하고, 삭제하는 역할을 담당합니다.
대표적인 DDL 명령어로는 CREATE, ALTER, DROP이 있습니다.
CREATE
CREATE 명령어는 데이터베이스나 테이블과 같은, 데이터베이스 오브젝트를 생성하는 명령어 입니다.
우선, 데이터베이스를 생성하려면 다음과 같이 작성합니다.
CREATE DATABASE 데이터베이스_이름;
데이터베이스를 생성한 후에는 해당 데이터베이스를 사용하겠다는 의미로 USE 명령어를 선언해야 합니다.
USE 데이터베이스_이름;
USE 명령어를 사용해 해당 데이터 베이스를 사용하겠다고 우선적으로 선언을 해주셔야 합니다.
그다음 원하는 테이블을 만들어봐야겠죠?
테이블을 생성하고자 한다면 CREATE TABLE을 선언해주시면 됩니다.
CREATE TABLE에 대한 기본 구조는 다음과 같은데요.
CREATE TABLE 테이블이름
({속성이름 데이터 타입
[NULL|NOT NULL|UNIQUE|DEFAULT 기본값|CHECK 체크조건]
}
[PRIMARY KEY 속성이름(들)]
[FOREIGN KEY 속성이름 REFERENCES 테이블이름(속성이름)]
[ON DELETE {CASCADE|SET NULL}]
);
이처럼 각 컬럼의 이름과 데이터 타입을 정의한 뒤, 필요한 제약 조건들을 함께 설정할 수 있습니다.
주요 제약 조건은 다음과 같습니다.
- PRIMARY KEY: 각 행을 유일하게 식별하는 기본키 (중복 및 NULL 불가)
- FOREIGN KEY: 다른 테이블을 참조하는 외래키
- UNIQUE: 중복을 허용하지 않음
- NOT NULL: NULL 값을 허용하지 않음
- DEFAULT: 값이 입력되지 않을 경우 기본값 설정
- CHECK: 특정 조건을 만족하는 값만 허용

예를 들어, 방문 기록을 저장하는 테이블을 만든다면 다음과 같이 작성할 수 있습니다.
CREATE TABLE visits (
visit_id INT AUTO_INCREMENT PRIMARY KEY,
patient_id INT,
visit_date DATETIME,
doctor VARCHAR(50),
CONSTRAINT fk_visits_patients
FOREIGN KEY (patient_id) REFERENCES patients(patient_id)
);
이 코드는 방문 ID를 기본키로 설정하고, patient_id는 다른 테이블(patients)을
참조하도록 외래키를 지정하도록 한 예시입니다.
각 컬럼은 이름을 먼저 정의한 뒤 데이터 타입을 지정하고, 필요에 따라 제약 조건을 추가하는 방식으로 작성합니다.
ALTER
ALTER 명령어는 이미 생성된 테이블의 구조를 수정할 때 사용하는 데이터 정의어(DDL)입니다.
테이블을 설계한 이후에도 요구사항이 변경되거나,
새로운 속성을 추가해야 하는 상황에서 사용하면 좋습니다.
ALTER 문의 구조는 다음과 같이 작성할 수 있어요.
ALTER TABLE 테이블이름
[ADD 속성이름 데이터타입]
[DROP COLUMN 속성이름]
[ALTER COLUMN 속성이름 데이터타입]
[ALTER COLUMN 속성이름 [NULL|NOT NULL]]
[ADD PRIMARY KEY(속성이름)]
[[ADD|DROP] 제약이름]
기본적으로 ALTER TABLE 문을 사용하여 컬럼(속성)을 추가하거나 삭제하고,
데이터 타입이나 제약 조건을 변경할 수 있습니다.
새로운 컬럼을 추가할 때는 ADD를 사용하고,
기존 컬럼을 삭제할 때는 DROP COLUMN을 사용합니다.
또한 컬럼의 데이터 타입을 변경할 때는 ALTER COLUMN을 활용할 수 있습니다.
이와 함께 기본키(Primary Key)나 외래키(Foreign Key)와 같은 제약 조건 역시
ADD 또는 DROP을 통해 추가하거나 제거할 수 있습니다.
다만, 사용하는 데이터베이스 관리 시스템(DBMS)에 따라 문법에 약간의 차이가 있는데요,
MySQL에서는 일반적으로
컬럼 타입을 변경할 때 ALTER COLUMN 대신 MODIFY를 사용하고,
컬럼 이름을 변경할 때는 CHANGE를 사용합니다.
# 컬럼 타입 변경
ALTER TABLE 테이블이름 MODIFY 속성명 타입;
# 컬럼 이름 변경
ALTER TABLE 테이블이름 CHANGE 원래_컬럼명 수정할_컬럼명 타입;
또한, 테이블 이름을 변경하고 싶을 경우, RENAME을 사용해서 수정이 가능합니다.
ALTER TABLE 원래_테이블명 RENAME TO 새_테이블명;
즉, ALTER 명령어는 테이블을 처음 생성한 이후에도 구조를 유연하게 변경할 수 있도록 도와주기 때문에,
데이터베이스 관리 과정에서 중요한 기능이라고 할 수 있어요.🤔
DROP
테이블을 생성을 했다면 삭제를 할 수도 있겠죠?
이때 사용하는 것이 DROP 명령어입니다.
테이블을 삭제하는 구조는 다음과 같습니다.
DROP TABLE 테이블_이름;
DROP 명령어는 한 번 실행하면 데이터를 복구하기 어렵기 때문에 조심히 사용해줘야 하는데요.
특히 외래키로 다른 테이블과 연결되어 있는 경우에는 추가 옵션을 고려해줘야 합니다.
옵션에는 CASCADE와 RESTRICT가 있어요.
- CASCADE: 해당 테이블을 참조하고 있는 다른 테이블의 관련 데이터까지 함께 삭제
- RESTRICT: 다른 테이블에서 참조 중이라면 삭제를 막음
DROP TABLE 테이블_이름 CASCADE;
쉽게 말해 CASCADE 옵션이 있을 경우, 연관된 데이터까지 함께 삭제됩니다.
DROP TABLE 테이블_이름 RESTRICT;
반면, RESTRICT 옵션이 있는 경우, 참조 관계가 존재하면 삭제가 수행되지 않습니다.
정리하자면, DDL은 데이터를 말하는게 아니라
데이터를 담는 구조를 설계하고 관리하는 명령어라고 할 수 있습니다.
테이블 구조와 제약 조건을 어떻게 정의하느냐에 따라서 데이터의 무결성과 활용도가 크게 달라지기 때문에
짜임새있게 설계하는 것이 중요해보입니다!🤔
'개발' 카테고리의 다른 글
| [머신러닝]: AI의 문제 해결 방식(지도학습, 비지도학습) (1) | 2026.04.30 |
|---|---|
| [데이터베이스]: SQLAlchemy Core를 활용한 데이터 분석 (0) | 2026.04.23 |
| [데이터베이스]: SQL 데이터 그룹화와 필터링에 대해 알아보기 (0) | 2026.04.21 |
| [데이터베이스]: 무결성과 정규화에 대해 알아보기 (0) | 2026.04.20 |
| [데이터 분석]: 데이터 타입의 이해 (1) | 2026.04.16 |