NOT NULL, UNIQUE, PRIMARY KEY

유방현·2024년 11월 4일
0

NOT NULL, UNIQUE, PRIMARY KEY 제약조건 상세 가이드

1. NOT NULL 제약조건

특정 열이 반드시 값을 가져야 하는 제약조건입니다.

CREATE TABLE dept_n1 (
    deptno INT(2) NOT NULL,
    dname VARCHAR(14),
    loc VARCHAR(13)
);

-- 성공 케이스
INSERT INTO dept_n1 VALUES (10, '개발부', '서울');

-- 실패 케이스 (에러 발생)
INSERT INTO dept_n1 VALUES (NULL, '영업부', '부산');
-- ERROR 1048 (23000): Column 'deptno' cannot be null

2. UNIQUE 제약조건

열에 중복된 값이 입력되는 것을 방지합니다.

CREATE TABLE dept_u1 (
    deptno INT(2) UNIQUE,
    dname VARCHAR(14),
    loc VARCHAR(13)
);

-- 성공 케이스
INSERT INTO dept_u1 VALUES (20, '인사부', '대전');

-- 실패 케이스 (에러 발생)
INSERT INTO dept_u1 VALUES (20, '재무부', '대구');
-- ERROR 1062 (23000): Duplicate entry '20' for key 'deptno'

3. PRIMARY KEY 제약조건

테이블의 각 행을 고유하게 식별하는 키입니다.

특징:

  • 중복 값 허용하지 않음
  • NULL 값 허용하지 않음
  • 테이블당 하나만 설정 가능
CREATE TABLE dept_p1 (
    deptno INT(2) PRIMARY KEY,
    dname VARCHAR(14),
    loc VARCHAR(13)
);

-- 실패 케이스들
INSERT INTO dept_p1 VALUES (10, '영업부', '부산');  -- 중복 키
INSERT INTO dept_p1 VALUES (NULL, '재무부', '대전'); -- NULL 값

4. AUTO_INCREMENT

자동으로 증가하는 값을 생성하는 제약조건입니다.

주요 특징:

  • PRIMARY KEY와 주로 함께 사용
  • 1부터 자동 증가
  • 중복되지 않는 고유값 보장
CREATE TABLE dept_a1 (
    deptno INT(2) PRIMARY KEY AUTO_INCREMENT,
    dname VARCHAR(14),
    loc VARCHAR(13)
);

-- 자동 증가 예시
INSERT INTO dept_a1 (dname, loc) VALUES ('개발부', '서울');  -- deptno: 1
INSERT INTO dept_a1 (dname, loc) VALUES ('영업부', '부산');  -- deptno: 2

5. CHECK 제약조건

입력되는 데이터가 특정 조건을 만족하는지 검증합니다.

CREATE TABLE dept_c1 (
    deptno INT(2) CHECK (deptno >= 30),
    dname VARCHAR(14),
    loc VARCHAR(13)
);

-- 성공 케이스
INSERT INTO dept_c1 VALUES (30, '개발부', '서울');

-- 실패 케이스
INSERT INTO dept_c1 VALUES (20, '영업부', '부산'); -- 조건 불만족

6. 복합키(Composite Key) 제약조건

여러 열을 조합하여 고유성을 보장하는 제약조건입니다.

특징:

  • 여러 열의 조합으로 고유성 보장
  • 데이터 무결성 유지
  • UNIQUE 또는 PRIMARY KEY로 설정 가능
CREATE TABLE order_u1 (
    pcode INT(4),
    ccode INT(4),
    orderdate DATE,
    etc VARCHAR(20),
    CONSTRAINT UNIQUE (pcode, ccode)
);

-- 성공 케이스들
INSERT INTO order_u1 VALUES (1000, 1000, NOW(), 'order1');
INSERT INTO order_u1 VALUES (1000, 2000, NOW(), 'order2');
INSERT INTO order_u1 VALUES (2000, 1000, NOW(), 'order3');

-- 실패 케이스
INSERT INTO order_u1 VALUES (1000, 1000, NOW(), 'order4'); -- 복합키 중복

💡 제약조건 사용 시 주의사항

  1. 성능 고려

    • 과도한 제약조건은 성능에 영향을 줄 수 있음
    • 필요한 경우에만 적절히 사용
  2. 데이터 정합성

    • 제약조건은 데이터 무결성 보장에 중요
    • 비즈니스 로직에 맞는 적절한 제약조건 설계 필요
  3. 유지보수

    • 제약조건 변경 시 기존 데이터 영향 고려
    • 명확한 이름과 문서화 필요
profile
코딩하는 직장인

0개의 댓글