SQL

[SQL] 제약 조건

Bay Im 2024. 3. 23. 12:58
  • 제약조건
    • 테이블에 제약조건을 설정하여 데이터 무결성을 유지할 수 있다.
    • CREATE 문으로 테이블 생성할 때나 ALTER 문으로 테이블 구조 변경시 지정 가능
    • 제약조건은 고유한 이름을 붙여서 식별할 수 있다.
    • 한 컬럼의 여러 개의 제약조건 설정 가능
    • 형식
      • CREATE TABLE 테이블명 (
        컬럼1 데이터타입 제약조건,
        컬럼2 데이터타입,
        제약조건(컬럼2)
        );​
      • 컬럼의 데이터타입 바로 다음에 기술 또는
      • 컬럼의 정의를 끝낸 후 제약조건을 별도로 지정으로 가능
  • 제약조건 종류
    • PRIMARY KEY
      • 기본키 설정
      • 기본키는 테이블 당 한개만 가능
      • 기본키는 NOT NULL과 유일한 값 (UNIQUE)을 가져야 한다.
      • 기본키 생성시 자동으로 인덱스 생성
    • NOT NULL
    • UNIQUE
      • 유일한 값을 넣어야 한다.
      • 자동 인덱스 생성
    • CHECK
      • 설정된 조건에 맞는 값만 넣어야 한다.
      • 조건으로는 특정 값이나 범위, 특정 패턴의 숫자나 문자 설정 가능
    • DEFAULT
      • 값을 넣지 않으면 지정한 값이 자동으로 들어간다.
    • FOREIGN KEY
      • 외래키 설정
      • 한 테이블의 외래키는 참조하는 테이블의 기본키이거나 NULL이어야 하고, 데이터 타입과 크기가 동일해야 한다.
  • 제약조건의 추가/삭제/지정
    • 추가
      • ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건(컬럼명이나 조건);
      • 예시
        • ALTER TABLE 평점관리 ADD CONSTRAINT q08_8 FOREIGN KEY (영화번호)
              REFERENCES 영화(영화번호)
              ON DELETE CASCADE;
    • 삭제
      • ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건;
    • 제약조건명의 지정 (고유 이름)
      • 컬럼 레벨
        • 컬럼명 데이터타입 [CONSTRAINT 제약조건명] 제약조건
      • 테이블 레벨
        • [CONSTRAINT 제약조건명] 제약조건
  • 외래키 제약조건의 옵션
    • CASCADE
      • ON DELETE CASCADE
        • 부모 레코드 삭제 시 자식 레코드도 연쇄적으로 삭제
      • ON UPDATE CASCADE
        • 부모 레코드의 기본키 수정시 자식 레코드의 외래키 값도 연쇄적으로 수정
    • SET NULL
      • ON DELETE
        • 부모 레코드 삭제시 자식 레코드의 외래키 값이 NULL로 변경
      • ON UPDATE
        • 부모 레코드의 기본키 수정시 자식 레코드의 외래키 값이 NULL로 변경
    • SET DEFAULT
      • ON DELETE
        • 부모 레코드 삭제시 자식 레코드의 외래키 값이 기본값으로 변경
      • ON UPDATE
        • 부모 레코드의 기본키 수정시 자식 레코드의 외래키값이 기본값으로 변경
    • NO ACTION (기본값)
      • ON DELETE
        • 자식 레코드가 있으면 부모 레코드를 삭제할 수 없다.
      • ON UPDATE
        • 자식 레코드가 있으면 부모 레코드의 기본키 값을 수정할 수 없다.

'SQL' 카테고리의 다른 글

[SQL] 데이터 모델링  (0) 2024.03.23
[SQL] 윈도우 함수  (0) 2024.03.23
[SQL] DDL (CREATE, ALTER, DROP)  (0) 2024.03.23
[SQL] DML (INSERT, UPDATE, DELETE)  (0) 2024.03.22
[SQL] 데이터 타입  (0) 2024.03.22