데이터베이스 내에는 여러 개의 테이블이 존재하며, 이 테이블들은 서로 관계를 맺으며 하나의 데이터베이스를 구성합니다.
관계(relationship)란 여러 테이블에 분산 저장된 데이터가 서로 어떻게 연결돼 있는지를 정의하는 개념입니다.
테이블이 서로 관련 있는 데이터를 묶은 것이라면, 관계는 여러 테이블에 흩어져 있는 데이터 간 연결고리를 맺어 주는 것을 의미합니다.
관계는 일대일 관계, 일대다 관계, 다대다 관계의 3가지 유형이 있습니다.
일대일 관계는 국가-수도 관계처럼 하나의 데이터가 하나의 데이터와만 연결된 관계입니다. 한 테이블의 한 레코드가 다른 테이블의 오직 하나의 레코드와만 연결됩니다.
SNS를 사용하는 특정 사용자가 있다고 합시다. 이 사용자는 하나의 개인 설정 값만 가질 수 있습니다. 따라서 '사용자'와 '개인 설정'은 일대일 관계입니다.
일대다 관계는 부모-자식 관계처럼 하나의 데이터가 여러 데이터와 연결된(포함 또는 소유) 관계입니다. 한 테이블의 한 레코드가 여러 개의 레코드와 연결될 수 있습니다.
SNS에 사진을 올리면 여러 댓글이 달립니다. 이는 하나의 사진에 여러 댓글이 달리는 것이므로 '사진'과 '댓글'은 일대다 관계입니다.
다대다 관계는 여러 데이터가 여러 데이터와 연결된 관계를 말합니다.
SNS에서 '사용자'와 '사진'은 '좋아요'라는 연결고리를 통해 보면 다대다 관계입니다. 한 명의 사용자가 여러 사진에 좋아요를 누를 수 있고, 반대로 하나의 사진은 여러 사용자로부터 좋아요를 받을 수 있기 때문입니다.
다대다 관계를 구현하기 위해서는 연결고리 역할을 하는 중간 테이블이 필요합니다. 앞의 예에서는 '좋아요'가 중간 테이블이 됩니다. '사용자' 테이블의 특정 튜플이 '좋아요' 테이블을 통해 '사진' 테이블의 여러 튜플과 연결되고, 반대로 '사진' 테이블의 특정 튜플이 '좋아요' 테이블을 통해 '사용자' 테이블의 여러 튜플과 연결되는 것입니다.
중간 테이블은 양쪽 두 테이블을 간접적으로 연결하는 역할을 합니다. 양쪽 두 테이블과 중간 테이블은 일대다 관계로 연결되며(사용자:좋아요 → 1:N, 사진:좋아요 → 1:M), 결과적으로 양쪽 테이블은 다대다 관계가 됩니다(사용자:사진 → N:M).
-- user 테이블: 사용자의 정보 저장 (user_id, username)
CREATE TABLE user (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE
);
-- photo 테이블: 사진 정보 저장 (photo_id, photo_url)
CREATE TABLE photo (
photo_id INT AUTO_INCREMENT PRIMARY KEY,
photo_url VARCHAR(255) NOT NULL
);
-- likes 테이블: user와 photo 간의 다대다 관계를 연결하는 중간 테이블
-- user_id와 photo_id를 외래 키로 설정하여 user와 photo 연결
-- UNIQUE (user_id, photo_id): 한 사용자가 같은 사진을 여러 번 좋아요 하지 못하게 설정
-- ON DELETE CASCADE: 사용자가 삭제되면 해당 사용자가 남긴 likes도 삭제, 사진이 삭제되면 관련된 likes도 삭제
CREATE TABLE likes (
like_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
photo_id INT NOT NULL,
liked_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(user_id) ON DELETE CASCADE,
FOREIGN KEY (photo_id) REFERENCES photo(photo_id) ON DELETE CASCADE,
UNIQUE (user_id, photo_id) -- 한 사용자가 같은 사진에 중복 좋아요를 방지
);
테이블 간의 관계를 설정할 때 키(key)를 사용합니다. 키란 테이블에서 각 레코드를 식별하는 고유한 값입니다.
테이블 간 관계는 기본키와 외래키 연결을 통해 만듭니다.
키 종류 | 설명 |
---|---|
기본 키(Primary Key, PK) | 테이블의 각 레코드를 유일하게 식별하는 키 |
외래 키(Foreign Key, FK) | 다른 케이블의 기본 키를 참조하는 키 |
대체 키(Candidate Key) | 기본 키로 사용할 수 있는 후보 키 |
슈퍼 키(Super Key) | 테이블 내에서 레코드를 유일하게 식별할 수 있는 속성들의 집합 |
기본키(Primary Key)란 테이블 내에서 모든 튜플을 구분할 수 있는 칼럼 또는 칼럼의 조합으로, 간단히 PK라고 합니다. 기본키는 각 테이블에서 유일한 값을 가집니다. 기본키는 주민등록번호를 생각하면 이해하기 쉽습니다.
기본키는 다음 4가지 특징을 만족해야 합니다.
기본키는 보통 칼럼명을 id라는 이름으로 짓는 경우가 많습니다.
외래키(Foreign Key)란 다른 테이블의 기본키를 가리키는 칼럼으로, 간단히 FK라고 합니다. 외래키는 다른 테이블의 기본키를 참조하며, 테이블 간의 관계를 정의하는 데 사용됩니다.
위 그림을 보면 users 테이블의 기본키(PK)인 id 칼럼을 가져와 photos 테이블의 user_id 칼럼으로 사용했습니다. user_id 칼럼처럼 다른 테이블의 기본키를 가져와 관계를 맺는 데 사용한 칼럼을 '외래키'라고 합니다. 외래키를 따라가면 1, 3번 사진을 1번 사용자가 등록했고, 2번 사진은 2번 사용자가, 4번 사진은 3번 사용자가 등록한 것을 알 수 있습니다.
외래키는 기본키와 달리 NULL
을 허용합니다. 외래키 값이 NULL
인 경우 가리키는 대상이 없음을 뜻합니다. 외래키를 이용해 테이블 간에 관계를 맺는 방법은 일대일 관계, 일대다 관계, 다대다 관계에 따라 다릅니다.
제약 조건(Constraint)은 칼럼에 저장할 수 있는 값에 대한 제한이나 규칙을 의미합니다.
제약 조건을 사용하면 데이터의 무결성을 유지하고 오류를 방지할 수 있습니다.
무결성(Integrity)이란 데이터가 변형되거나 손상되지 않도록 보장하는 것을 의미합니다
MySQL에서 제공하는 제약 조건에는 PRIMARY KEY
, FOREIGN KEY
, AUTO_INCREMENT
, UNIQUE
, NOT NULL
, DEFAULT
, CHECK
, UNSIGNED
등이 있습니다.
제약 조건 | 설명 |
---|---|
PRIMARY KEY | 한 테이블의 각 행을 고유하게 식별하는 키, NULL X, 중복 X |
FOREIGN KEY | 다른 테이블의 기본키(PK)를 참조하는 키 |
AUTO_INCREMENT | 정수형 칼럼의 값을 자동으로 1씩 증가. 주로 기본키(PK)와 함께 사용 |
UNIQUE | 해당 칼럼의 값이 고유해야 함. 중복된 값 입력 불가 |
NOT NULL | 해당 칼럼에 NULL 값을 허용하지 않음 |
DEFAULT | 해당 칼럼에 기본값을 설정. 값이 입력되지 않으면 기본값이 자동으로 삽입됨 |
CHECK | 칼럼의 값이 특정 조건을 만족해야 함. 조건 불만족 시 오류 발생 |
UNSIGNED | 숫자형 칼럼에서 음수를 허용하지 않고 양수 값만 저장하도록 제한 |
PRIMARY KEY
: 한 테이블의 각 행을 고유하게 식별하는 키입니다. 한 테이블에서 중복과 NULL
을 허용하지 않으며, 테이블당 하나만 존재할 수 있습니다.FOREIGN KEY
: 한 테이블의 칼럼이 다른 테이블의 PRIMARY KEY를 참조할 때 사용합니다. 테이블 간의 관계를 형성하며, 참조 무결성(Referential Integrity)을 유지하는 데 중요한 역할을 합니다.AUTO_INCREMENT
: 칼럼의 값을 자동으로 1씩 증가시킵니다. 정수형 칼럼에 붙일 수 있으며 주로 기본키와 함께 사용됩니다.UNIQUE
: 칼럼의 값으로 고유한 값만 허용합니다. UNIQUE 제약 조건을 설정한 칼럼에 중복 값을 입력하면 에러가 발생합니다.NOT NULL
: 칼럼에 NULL을 허용하지 않습니다. NOT NULL로 설정된 칼럼에 NULL 값이 들어가면 에러가 발생합니다.DEFAULT
: 칼럼에 기본값을 지정합니다. 해당 칼럼에 입력값이 주어지지 않으면 기본으로 지정된 값이 삽입됩니다.CHECK
: 칼럼의 값이 특정 조건을 만족하도록 조건을 지정합니다. 조건을 만족하지 않는 값이 입력되면 에러가 발생합니다.UNSIGNED
: 숫자형 칼럼에서 음수를 허용하지 않고 양수 값만 저장하도록 제한합니다.CREATE TABLE users (
id INTEGER PRIMARY KEY, -- 기본키 설정 (고유한 값)
name VARCHAR(50) NOT NULL -- NULL 값을 허용하지 않음
);
CREATE TABLE photos (
id INTEGER PRIMARY KEY,
filename VARCHAR(255) NOT NULL,
user_id INTEGER,
FOREIGN KEY (user_id) REFERENCES users(id) -- users 테이블의 id를 참조
);
CREATE TABLE orders (
order_id INTEGER PRIMARY KEY AUTO_INCREMENT, -- 1부터 자동 증가
amount DECIMAL(10, 2) NOT NULL
);
CREATE TABLE employee (
emp_id INTEGER PRIMARY KEY,
email VARCHAR(255) UNIQUE -- 이메일은 중복될 수 없음
);
CREATE TABLE customers (
id INTEGER PRIMARY KEY,
name VARCHAR(50) NOT NULL -- 반드시 값이 있어야 함
);
CREATE TABLE customers (
id INTEGER PRIMARY KEY,
price DECIMAL(10, 2) DEFAULT 0.00 -- 값이 없으면 기본값 0.00 삽입
);
CREATE TABLE students (
id INTEGER PRIMARY KEY,
age INTEGER CHECK (age >= 18) -- 나이는 18세 이상만 허용
);
CREATE TABLE inventory (
id INTEGER PRIMARY KEY,
stock INTEGER UNSIGNED -- 재고는 음수가 될 수 없음
);
관계형 데이터베이스(Relational Database)에서는 여러 개의 테이블을 서로 연결하여 데이터를 효율적으로 관리할 수 있습니다. 이러한 테이블 간의 관계는 외래키(FOREIGN KEY, FK)를 통해 설정됩니다.
테이블 간의 관계는 크게 일대일(1:1), 일대다(1:N), 다대다(N:M) 관계로 나눌 수 있습니다.
테이블을 만들 때 외래키를 지정하는 방법은 다음과 같습니다.
CREATE TABLE 테이블명 (
칼럼명1 자료형1,
칼럼명2 자료형2,
...
PRIMARY KEY (칼럼명),
FOREIGN KEY (칼럼명) REFERENCES 연결대상_테이블(연결대상_테이블의_기본키)
);
외래키는 FOREIGN KEY (칼럼명) 명령으로 지정한 다음 해당 외래키가 어느 테이블의 기본키를 가리키는지 REFERENCES 연결대상 테이블(연결대상 테이블의 기본키)로 명시합니다. 그러면 두 테이블 간 관계가 만들어집니다.
일대일 관계는 한 테이블의 행이 다른 테이블의 단 하나의 행과만 연결되는 관계입니다.
일대일 관계는 하나의 칼럼 값이 하나의 칼럼 값으로만 매칭되기 때문에 두 테이블이 긴밀히 관련된 경우가 많습니다. 또한 원래 한 테이블이었다가 두 테이블로 분리하는 게 더 나아, 그렇게 했을 경우 자연스럽게 두 테이블이 일대일 관계를 맺는 경우도 많습니다.
일대일 관계에서 외래키는 양쪽 테이블 중 어느 곳에 두어도 됩니다. 다만 테이블의 사용 빈도가 더 적은 쪽에 두는 것이 일반적입니다.
이 방법에서는 하위 테이블(자식 테이블)의 기본키(PK)를 FK로도 사용합니다.
예시:
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);
CREATE TABLE profiles (
id INTEGER PRIMARY KEY, -- profiles 테이블의 PK
bio TEXT,
FOREIGN KEY (id) REFERENCES users(id) -- PK 자체가 FK 역할 수행
);
예시를 보면 알 수 있듯이, 위 방법은 profiles 테이블의 id가 자체적으로 기본키(PK)이면서도, users 테이블의 id를 참조하는 외래키(FK) 역할을 수행하는 방식입니다.
이 방법에서는 하위 테이블(자식 테이블)의 기본키(PK)와 외래키(FK)를 별도로 설정합니다.
예시:
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);
CREATE TABLE profiles (
id INTEGER PRIMARY KEY AUTO_INCREMENT -- profiles 테이블의 PK
user_id INTEGER UNIQUE, -- users 테이블의 id를 참조하는 FK
bio TEXT,
FOREIGN KEY (user_id) REFERENCES users(id) -- users 테이블의 id를 참조
);
일대다 관계는 한 테이블의 한 행이 다른 테이블의 여러 행과 연결되는 관계입니다.
한 '사용자'가 게시한 여러 개의 '사진', 한 '영상'에 포함된 여러 개의 '댓글', 한 '팀'에 소속된 여러 명의 '선수' 등이 일대다 관계의 예입니다.
일대다 관계에서는 "다(N)"에 해당하는 테이블에 외래키(FK)를 추가하여 "일(1)" 테이블의 기본키(PK)를 참조합니다.
예시: users(사용자) 테이블과 orders(주문) 테이블 (한 사용자가 여러 주문을 할 수 있음)
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);
CREATE TABLE orders (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
user_id INTEGER,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (user_id) REFERENCE users(id) -- users 테이블의 id를 참조
);
다대다 관계는 한 테이블의 여러 행이 다른 테이블의 여러 행과 연결되는 관계입니다.
다대다 관계에서는 두 테이블을 직접 연결할 수 없으므로 중간 테이블(조인 테이블)을 생성하여 외래키를 관리합니다.
중간 테이블은 다대다 관계를 구현하기 위해 양쪽 테이블을 간접적으로 연결합니다. 중간 테이블을 B 테이블이라고 하면, A 테이블과 B 테이블을 일대다 관계로 연결하고, C 테이블과 B 테이블도 일대다 관계로 연결합니다. 그러면 A와 C 테이블은 다대다 관계가 됩니다. 이를 위해 중간 테이블(B)은 양쪽 테이블(A, C)의 기본키를 가져와 외래키로 사용합니다.
예시: students(학생) 테이블과 courses(강의) 테이블 (한 학생이 여러 강의를 들을 수 있고, 한 강의에 여러 학생이 참여할 수 있음)
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);
CREATE TABLE courses (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(100) NOT NULL
);
-- 중간 테이블 (학생과 강의를 연결)
CREATE TABLE student_courses (
student_id INTEGER,
course_id INTEGER,
PRIMARY KEY (student_id, course_id), -- 복합 기본키 설정
FOREIGN KEY (student_id) REFERENCES students(id), -- students 테이블 참조
FOREIGN KEY (course_id) REFERENCES courses(id) -- courses 테이블 참조
);
PRIMARY KEY
로 설정별그램 DB를 생성하고, 다음의 5개 테이블을 생성합니다.
5개의 테이블은 다음과 같은 관계를 가집니다.
stargram(별그램) DB를 생성한 후 진입합니다.
-- stargram DB 생성 및 진입
CREATE DATABASE stargram;
USE stargram;
users 테이블을 생성합니다.
-- users 테이블 생성
CREATE TABLE users (
id INTEGER AUTO_INCREMENT, -- 아이디(자동으로 1씩 증가)
nickname VARCHAR(30), -- 닉네임
email VARCHAR(255), -- 이메일
PRIMARY KEY (id) -- 기본키 지정: id
);
users 테이블에 데이터를 삽입합니다. id 칼럼에 AUTO_INCREMENT
제약 조건을 설정했으므로 id 값은 입력하지 않아도 됩니다.
-- users 데이터 삽입(id는 자동 증갓값으로 입력되므로 생략)
INSERT INTO users (nickname, email)
VALUES
('홍길동', 'hong@example.com'),
('안중근', 'ahn@example.com'),
('윤봉길', 'yoon@example.com');
users 테이블과 photos 테이블은 일대다 관계입니다.
users 테이블과 photos 테이블을 일대다 관계로 연결하려면 '다' 쪽인 photos 테이블에 외래키를 선언해 users 테이블의 기본키를 가리키도록 해야 합니다.
AUTO_INCREMENT
제약 조건을 설정합니다. NOT NULL
제약 조건을 설정합니다.-- photos 테이블 생성
CREATE TABLE photos (
id INTEGER AUTO_INCREMENT, -- 아이디(자동으로 1씩 증가)
filename VARCHAR(255) NOT NULL, -- 파일명(NULL을 허용하지 않음)
user_id INTEGER, -- 게시자 아이디
PRIMARY KEY (id), -- 기본키 지정: id
FOREIGN KEY (user_id) REFERENCES users(id) -- 외래키 지정: user_id
);
photos 테이블에 데이터를 삽입합니다. id 컬럼 값은 자동으로 1씩 증가하므로 생략하고, 외래키 user_id 컬럼 값은 사진을 게시한 users 테이블의 기본키를 가리키게 합니다.
-- photos 데이터 삽입
INSERT INTO photos (filename, user_id)
VALUES
-- 1번 사용자가 게시한 사진
('고양이.jpg', 1),
('일몰.jpg', 1),
('우주.jpg', 1),
-- 2번 사용자가 게시한 사진
('호랑이.jpg', 2),
('사자.jpg', 2),
-- 사용자가 등록되지 않은 사진
('삭제된 이미지.jpg', NULL),
('삭제된 이미지.jpg', NULL);
한 명의 사용자가 여러 댓글을 달 수 있으니 users 테이블과 comments 테이블은 일대다 관계입니다.
그리고 하나의 사진에 여러 댓글이 달릴 수 있으므로 photos 테이블과 comments 테이블 또한 일대다 관계입니다.
결국 users 테이블과 photos 테이블은 comments 테이블을 중간 테이블로 하여 다대다 관계가 됩니다.
-- comments 테이블 생성
CREATE TABLE comments (
id INTEGER AUTO_INCREMENT, -- 아이디(자동으로 1씩 증가)
body VARCHAR(1000), -- 댓글 본문
user_id INTEGER, -- 작성자 아이디
photo_id INTEGER, -- 댓글이 달린 사진 아이디
PRIMARY KEY (id), -- 기본키 지정: id
FOREIGN KEY (user_id) REFERENCES users(id), -- 외래키 지정: user_id
FOREIGN KEY (photo_id) REFERENCES photos(id) -- 외래키 지정: photo_id
);
comments 테이블에 데이터를 삽입합니다. id는 AUTO_INCREMENT
제약 조건으로 인해 자동 입력되므로 생략합니다.
-- comments 데이터 삽입
INSERT INTO comments (body, user_id, photo_id)
VALUES
-- 1번 사진에 달린 댓글
('야옹', 1, 1),
('냐옹', 2, 1),
('미야옹', 3, 1),
-- 2번 사진에 달린 댓글
('일몰입니다.', 1, 2),
('일몰이네요.', 2, 2),
-- 3번 사진에 달린 댓글
('우주입니다.', 1, 3),
('우주네요.', 3, 3),
-- 대상 사진이 없는 댓글
('널입니다.', 3, NULL),
('널이네요', 3, NULL);
사용자 한 명당 하나의 개인 설정 값을 가지므로 settings(개인 설정) 테이블과 users 테이블은 일대일 관계입니다.
NOT NULL
제약 조건을 부여합니다.UNIQUE
제약 조건을 설정해 users 테이블과 일대일 관계가 되도록 합니다.-- settings 테이블 생성
CREATE TABLE settings (
id INTEGER AUTO_INCREMENT, -- 아이디(자동으로 1씩 증가)
private BOOLEAN NOT NULL, -- 계정 공개 여부(NULL 허용하지 않음)
account_suggestions BOOLEAN NOT NULL, -- 계정 추천 여부(NULL 허용하지 않음)
user_id INTEGER UNIQUE, -- 사용자 아이디(고유한 값만 허용)
PRIMARY KEY (id), -- 기본키 지정: id
FOREIGN KEY (user_id) REFERENCES users(id) -- 외래키 지정: user_id
);
BOOLEAN 자료형
BOOLEAN은 TRUE(참) 또는 FALSE(거짓)만을 값으로 갖는 자료형입니다.
내부적으로는 TINYINT(1)로 선언된 정수값을 지니는데, 0은 거짓인 FALSE로 해석하고 그 외의 정수는 모두 참인 TRUE로 해석합니다.
-- settings 데이터 삽입
INSERT INTO settings (private, account_suggestions, user_id)
VALUES
(FALSE, FALSE, 1), -- 1번 사용자(비공개 계정, 계정 추천 불가)
(FALSE, TRUE, 2), -- 2번 사용자(비공개 계정, 계정 추천 허용)
(TRUE, TRUE, 3); -- 3번 사용자(공개 계정, 계정 추천 허용)
'사용자'는 여러 '사진'에 좋아요를 누를 수 있고, '사진' 또한 여러 명의 '사용자'에게 좋아요를 받을 수 있습니다.
결국 users 테이블과 photos 테이블은 likes 테이블을 중간 테이블로 하여 다대다 관계를 형성합니다.
-- likes 테이블 생성
CREATE TABLE likes (
id INTEGER AUTO_INCREMENT, -- 아이디(자동으로 1씩 증가)
user_id INTEGER, -- 좋아요를 누른 사용자 아이디
photo_id INTEGER, -- 좋아요가 달린 사진 아이디
PRIMARY KEY (id), -- 기본키 지정: id
FOREIGN KEY (user_id) REFERENCES users(id), -- 외래키 지정: user_id
FOREIGN KEY (photo_id) REFERENCES photos(id) -- 외래키 지정: photo_id
);
likes 테이블에 데이터를 삽입합니다.
-- likes 데이터 삽입
INSERT INTO likes (user_id, photo_id)
VALUES
-- 1번 사진에 달린 좋아요: 1, 2번 사용자가 누름
(1, 1),
(2, 1),
-- 2번 사진에 달린 좋아요: 1, 2, 3번 사용자가 누름
(1, 2),
(2, 2),
(3, 2),
-- 3번 사진에달린 좋아요: 1, 3번 사용자가 누름
(1, 3),
(3, 3),
-- 6번 사진에 달린 좋아요: 사용자 미등록
(NULL, 6),
-- 7번 사진에 달린 좋아요: 사용자 미등록
(NULL, 7);
여러 테이블에 분산 저장된 데이터가 서로 어떻게 연관돼 있는지를 정의하는 개념으로, 여러 테이블에 흩어져 있는 데이터 간 연결 고리를 만들어 주는 것입니다.
국가-수도 관계처럼 하나의 데이터가 하나의 데이터와만 연결된 관계입니다.
부모-자식 관계처럼 데이터가 여러 데이터와 연결된(포함 또는 소유) 관계입니다.
컬럼에 저장할 수 있는 값에 대해 어떤 제한이나 규칙을 거는 것을 말합니다.
AUTO INCREMENT
: 컬럼의 값을 자동으로 1씩 증가시킵니다. 정수형 컬럼에 붙일 수 있으며 주로 기본키와 함께 사용됩니다.UNIQUE
: 컬럼의 값으로 고유한 값만 허용합니다. UNIQUE 제약 조건을 설정한 컬럼에 중복 값을 입력하면 에러가 납니다.NOT NULL
: 컬럼에 NULL을 허용하지 않습니다. NOT NULL로 설정된 컬럼에 NULL값이 들어가면 에러가 납니다.DEFAULT
: 컬럼에 기본값을 지정합니다. 해당 컬럼에 입력값이 주어지지 않으면 기본으로 지정된 값이 삽입됩니다.CHECK
: 컬럼의 값이 특정 조건을 만족하도록 조건을 지정합니다. 조건을 만족하지 않는 값이 입력되면 에러가 납니다.UNSIGNED
: 숫자형 컬럼에서 음수를 허용하지 않고 양수 값만 저장하도록 제한합니다.TRUE(참) FALSE(거짓)만을 값으로 갖는 자료형입니다. 내부적으로는 TINYINT(1)로 선언된 정수값을 지니는데, 0은 거짓인 FALSE로 해석되고 그 외의 정수는 모두 참인 TRUE로 해석됩니다.