
이번 포스팅에서는 MySQL에서 데이터 무결성과 안정성을 보장하는 데 필수적인
제약조건(Constraint) 개념과 주요 제약조건들을 중점적으로 다루며,
꼭 알아야 할 주요 옵션과 제한 사항까지 함께 소개할 예정!
추가적으로 흐름제어(if, ifnull, case)까지 정리해보겠다
PK (PRIMARY KEY)
NOT NULL + UNIQUE 성격 포함 FK (FOREIGN KEY)
PRIMARY KEY 또는 UNIQUE 컬럼을 참조하는 제약조건 NOT NULL
NULL 값을 허용하지 않음UNIQUE
NULL 값은 MySQL에서는 여러 개 허용될 수 있음NOT NULL은 ALTER TABLE과 MODIFY COLUMN을 통해 추가/제거 가능하다.UNIQUE는 수정 없이 추가만 가능하며, 제거는 인덱스에서 직접 한다.-- NOT NULL 추가
ALTER TABLE author
MODIFY COLUMN name VARCHAR(255) NOT NULL;
-- NOT NULL 제거
ALTER TABLE author
MODIFY COLUMN name VARCHAR(255);
-- NOT NULL + UNIQUE 동시에 추가
ALTER TABLE author
MODIFY COLUMN email VARCHAR(255) NOT NULL UNIQUE;
SHOW INDEX) 후 DROP INDEX로 삭제해야 한다.CREATE TABLE post (
id INT AUTO_INCREMENT,
author_id INT,
title VARCHAR(255),
content TEXT,
PRIMARY KEY (id)
);
PRIMARY KEY 붙이거나, 테이블 레벨로 지정 가능ALTER TABLE post
ADD CONSTRAINT pk_post_id PRIMARY KEY (id);
pk_post_id 는 제약조건 이름이며 자유롭게 지정 가능ALTER TABLE post
DROP PRIMARY KEY;
DROP PRIMARY KEY로 제거 가능CREATE TABLE author (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
CREATE TABLE post (
id INT AUTO_INCREMENT PRIMARY KEY,
author_id INT,
title VARCHAR(255)
);
ALTER TABLE post
ADD CONSTRAINT fk_post_author
FOREIGN KEY (author_id)
REFERENCES author(id);
ALTER TABLE post
DROP FOREIGN KEY fk_post_author;
ON DELETE SET NULL : 부모 행 삭제 시 자식 FK 컬럼을 NULL로 설정ON UPDATE CASCADE : 부모 PK 변경 시 자식도 자동 변경RESTRICT, NO ACTION, CASCADE 옵션 존재ALTER TABLE post
ADD CONSTRAINT fk_post_author
FOREIGN KEY (author_id)
REFERENCES author(id)
ON DELETE SET NULL
ON UPDATE CASCADE;
| 제약조건 | 추가 방법 | 삭제 방법 |
|---|---|---|
| PK | 테이블 생성 시 또는 ALTER TABLE에 ADD CONSTRAINT | ALTER TABLE DROP PRIMARY KEY |
| FK | 테이블 생성 시 또는 ALTER TABLE ADD CONSTRAINT | ALTER TABLE DROP FOREIGN KEY |
| NOT NULL | ALTER TABLE MODIFY COLUMN | ALTER TABLE MODIFY COLUMN에서 NOT NULL 제거 |
| UNIQUE | 컬럼 정의 시 UNIQUE 키워드 또는 ADD CONSTRAINT | 인덱스 이름 확인 후 DROP INDEX |
ALTER TABLE author
MODIFY COLUMN name VARCHAR(255) DEFAULT 'anonymous';
ALTER TABLE author
MODIFY COLUMN id INT AUTO_INCREMENT;
ALTER TABLE post
ADD COLUMN user_id CHAR(36) DEFAULT (UUID());
![]() |
|---|
| 10~15=a~f, 16진수 문자열 사용 예시 |
CASE 문은 조건에 따라 서로 다른 결과를 반환할 때 사용한다.
CASE 비교대상
WHEN 값1 THEN 결과1
WHEN 값2 THEN 결과2
...
ELSE 기본결과
END
CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
...
ELSE 기본결과
END
SELECT id,
CASE
WHEN name IS NULL THEN '익명사용자'
WHEN name = 'hong' THEN '홍길동'
WHEN name = 'hong2' THEN '홍길동2'
ELSE name
END AS name
FROM author;
name 컬럼 값에 따라 각기 다른 문자열을 동적으로 반환하는 예시다.WHEN 조건을 자유롭게 사용할 수 있다.ELSE는 선택 사항이며, 생략 시 조건 미충족 시 NULL을 반환한다.CASE 문은 SQL 표현식이어서 SELECT, WHERE, ORDER BY 등 다양한 위치에서 사용할 수 있다.SELECT *
FROM post
WHERE CASE
WHEN status = 'published' THEN 1
ELSE 0
END = 1;
SELECT *
FROM author
ORDER BY
CASE
WHEN name = '홍길동' THEN 1
ELSE 2
END,
name;
IF(조건, 참일 때 값, 거짓일 때 값)
SELECT id,
IF(name IS NULL, '익명사용자', name) AS name
FROM author;
CASE 문보다 짧고 명료할 때 좋다.IFNULL(expr1, expr2) : expr1이 NULL이면 expr2 반환SELECT id,
IFNULL(name, '익명사용자') AS name
FROM author;
COALESCE(expr1, expr2, ..., exprN) : 여러 인자 중 가장 먼저 NULL이 아닌 값 반환SELECT id,
COALESCE(name, '익명사용자', '대체값') AS name
FROM author;
COALESCE는 다중 대안값 중 우선순위 높은 값을 얻고자 할 때 사용한다.| 함수 이름 | 설명 | 특징/용도 |
|---|---|---|
CASE | 복잡한 조건별 다른 값 반환 | SQL 표준, 다양한 절에 활용 가능 |
IF | 간단 조건 처리(MySQL 전용) | 짧고 명확, 단일 조건에 강점 |
IFNULL | NULL 여부 검사 및 기본값 반환 | 두 값 중 NULL 여부만 판단 |
COALESCE | 여러 값 중 첫 번째 NULL 아닌 값 반환 | 다수 인자 처리 가능, 대체값 지정 시 자주 쓰임 |
https://school.programmers.co.kr/learn/courses/30/lessons/132201
https://school.programmers.co.kr/learn/courses/30/lessons/164672
https://school.programmers.co.kr/learn/courses/30/lessons/131114
프로그래머스로 훈련하니까 확실히 더 잘 익는 느낌이다.
다른 문법들도 빨리 익혀서 문제풀이를 많이 해보고싶음
Case 문재인