[MariaDB] 제약조건과 주요 옵션, 흐름 제어

이지연·2025년 11월 24일
post-thumbnail

개요

이번 포스팅에서는 MySQL에서 데이터 무결성과 안정성을 보장하는 데 필수적인
제약조건(Constraint) 개념과 주요 제약조건들을 중점적으로 다루며,
꼭 알아야 할 주요 옵션과 제한 사항까지 함께 소개할 예정!
추가적으로 흐름제어(if, ifnull, case)까지 정리해보겠다


제약조건 개념 요약

  • PK (PRIMARY KEY)

    • 테이블 내에서 각 행을 유일하게 식별하는 컬럼(또는 컬럼 조합)
    • 자동으로 NOT NULL + UNIQUE 성격 포함
    • 한 테이블에 하나만 존재 가능
  • FK (FOREIGN KEY)

    • 다른 테이블의 PRIMARY KEY 또는 UNIQUE 컬럼을 참조하는 제약조건
    • 테이블 간 참조 무결성을 보장
  • NOT NULL

    • 해당 컬럼에 NULL 값을 허용하지 않음
  • UNIQUE

    • 해당 컬럼 값이 테이블 내에서 중복될 수 없음
    • NULL 값은 MySQL에서는 여러 개 허용될 수 있음

1. NOT NULL / UNIQUE (컬럼 수준)

  • NOT NULLALTER TABLEMODIFY 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;
  • UNIQUE 제거 시에는 종종 인덱스 이름을 확인(SHOW INDEX) 후 DROP INDEX로 삭제해야 한다.

2. PRIMARY KEY (PK) 제약조건

테이블 생성 시 PK 지정

CREATE TABLE post (
    id INT AUTO_INCREMENT,
    author_id INT,
    title VARCHAR(255),
    content TEXT,
    PRIMARY KEY (id)
);
  • 컬럼 옆에 직접 PRIMARY KEY 붙이거나, 테이블 레벨로 지정 가능

PK 제약조건 추가

ALTER TABLE post
ADD CONSTRAINT pk_post_id PRIMARY KEY (id);
  • pk_post_id 는 제약조건 이름이며 자유롭게 지정 가능
  • 이미 데이터가 있으면 중복이나 NULL로 인해 실패할 수 있음

PK 제약조건 삭제

ALTER TABLE post
DROP PRIMARY KEY;
  • 이름 없이 DROP PRIMARY KEY로 제거 가능

3. FOREIGN KEY (FK) 제약조건

테이블 구조 예시

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)
);

FK 제약조건 추가

ALTER TABLE post
ADD CONSTRAINT fk_post_author
FOREIGN KEY (author_id)
REFERENCES author(id);

FK 제약조건 삭제

ALTER TABLE post
DROP FOREIGN KEY fk_post_author;

ON DELETE / ON UPDATE 옵션

  • 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 TABLEADD CONSTRAINTALTER TABLE DROP PRIMARY KEY
FK테이블 생성 시 또는 ALTER TABLE ADD CONSTRAINTALTER TABLE DROP FOREIGN KEY
NOT NULLALTER TABLE MODIFY COLUMNALTER TABLE MODIFY COLUMN에서 NOT NULL 제거
UNIQUE컬럼 정의 시 UNIQUE 키워드 또는 ADD CONSTRAINT인덱스 이름 확인 후 DROP INDEX

컬럼 옵션

1) DEFAULT 값 지정

  • 거의 모든 데이터 타입에 설정 가능
  • 예시:
ALTER TABLE author
MODIFY COLUMN name VARCHAR(255) DEFAULT 'anonymous';

2) AUTO_INCREMENT

  • 숫자 타입에서 자주 사용
  • 값을 명시하지 않으면 자동으로 이전 최대값 + 1이 저장됨
  • 보통 PK 컬럼에 붙임
ALTER TABLE author 
MODIFY COLUMN id INT AUTO_INCREMENT;

3) UUID 사용

  • 128비트(16진수 32자 + 하이픈 포함 36자) 고유 식별자
  • 예시:
ALTER TABLE post
ADD COLUMN user_id CHAR(36) DEFAULT (UUID());
  • UUID는 숫자가 아닌 16진수 문자열(알파벳 a-f 포함) 형태다.
10~15=a~f, 16진수 문자열 사용 예시

흐름제어

1) CASE 문 기본 구조

CASE 문은 조건에 따라 서로 다른 결과를 반환할 때 사용한다.

기본 형태 1: 단순 CASE (비교식)

CASE 비교대상
  WHEN1 THEN 결과1
  WHEN2 THEN 결과2
  ...
  ELSE 기본결과
END

기본 형태 2: 검색 CASE (복잡한 조건 가능)

CASE
  WHEN 조건1 THEN 결과1
  WHEN 조건2 THEN 결과2
  ...
  ELSE 기본결과
END

2) 예시: author 테이블에서 name 컬럼 값에 따른 결과 반환

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 컬럼 값에 따라 각기 다른 문자열을 동적으로 반환하는 예시다.

3) CASE 문 활용 팁

  • 여러 WHEN 조건을 자유롭게 사용할 수 있다.
  • ELSE는 선택 사항이며, 생략 시 조건 미충족 시 NULL을 반환한다.
  • CASE 문은 SQL 표현식이어서 SELECT, WHERE, ORDER BY 등 다양한 위치에서 사용할 수 있다.

예) WHERE 절에서 CASE 사용

SELECT *
FROM post
WHERE CASE
    WHEN status = 'published' THEN 1
    ELSE 0
END = 1;
  • 조건에 맞춰 필터링할 때 유용하다.

예) ORDER BY 절에서 CASE 사용

SELECT *
FROM author
ORDER BY
  CASE
    WHEN name = '홍길동' THEN 1
    ELSE 2
  END,
  name;
  • 특정 값을 우선 정렬하고 나머지는 두 번째 기준으로 정렬하는 패턴

4) IF 함수 (MySQL 전용)

IF(조건, 참일 때 값, 거짓일 때 값)
SELECT id,
    IF(name IS NULL, '익명사용자', name) AS name
FROM author;
  • 간단한 조건 처리에 사용하며, CASE 문보다 짧고 명료할 때 좋다.

5) IFNULL / COALESCE 함수 (NULL 처리 전용)

  • IFNULL(expr1, expr2) : expr1NULL이면 expr2 반환
SELECT id,
    IFNULL(name, '익명사용자') AS name
FROM author;
  • COALESCE(expr1, expr2, ..., exprN) : 여러 인자 중 가장 먼저 NULL이 아닌 값 반환
SELECT id,
    COALESCE(name, '익명사용자', '대체값') AS name
FROM author;
  • COALESCE는 다중 대안값 중 우선순위 높은 값을 얻고자 할 때 사용한다.

6) 흐름 제어 함수 요약 및 문제풀이

함수 이름설명특징/용도
CASE복잡한 조건별 다른 값 반환SQL 표준, 다양한 절에 활용 가능
IF간단 조건 처리(MySQL 전용)짧고 명확, 단일 조건에 강점
IFNULLNULL 여부 검사 및 기본값 반환두 값 중 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


마치며

프로그래머스로 훈련하니까 확실히 더 잘 익는 느낌이다.
다른 문법들도 빨리 익혀서 문제풀이를 많이 해보고싶음

profile
Eazy하게

1개의 댓글

comment-user-thumbnail
2025년 12월 11일

Case 문재인

답글 달기