제약 조건

All We Need is Data, itself !·2023년 4월 25일
0

ETC

목록 보기
11/11

제약 조건의 개념

  • 제약 조건은 데이터의 정합성을 보장하기 위해 사용된다.
  • 일련의 규칙을 정하여 컬럼에 부적절한 데이터가 저장되는 것을 사전에 차단

데이터의 정합성과 무결성

  • ex1) 고객 테이블에 고객 A의 이름이 "K"로 들어가 있다. 고객 주문 테이블 내 고객 A의 이름도 "K"로 들어가 있다. 하지만 고객의 이름은 두 글자 이상이어야 한다.
    • 데이터의 정합성이 보장되었지만 무결성이 보장되지 않았다.
  • ex2) 고객 테이블에 고객 A의 이름이 "KJ"로 들어가 있다. 고객 주문 테이블 내 고객 A의 이름은 "KA"로 들어가 있다.
    • 데이터의 무결성은 보장되었지만 정합성이 보장되지 않았다.
  • 무결성: 데이터의 값이 정확한 상태
  • 정합성: 데이터의 값이 서로 일치하는 상태

제약 조건의 종류

  • Unique : 컬럼에 데이터의 유일성을 보장하는 제약 조건

    • 동일한 값이 존재하면 Insert 실패
    • 복합 Unique 제약 조건 설정도 가능
  • Primary Key : Unique 제약 조건과 컬럼의 Not null 속성을 동시에 만족해야 되는 제약 조건

  • Foreign Key : 2개의 테이블에 의해서 구성되는 제약 조건

    • 사원 테이블의 부서번호 컬럼에 존재하는 Foreign Key 제약 조건이 부서 테이블의 부서번호 컬럼을 참조한다면, 부서 테이블에 데이터가 없으면 사원 테이블에 insert 할 수 없게 된다.
    • 부모 테이블에 존재하는 데이터로만 자식 테이블의 데이터를 유지하는 것
  • Check : 컬럼에 조건을 설정하여 조건에 만족하는 데이터에 대해서만 저장 또는 변경을 허용하는 제약 조건

    • 앞선 예시 고객명은 두글자 이상이어야 한다 -> Check 조건

제약 조건의 관리

Unique 제약 조건

  • 제약 조건의 생성
    • Row 레벨 제약 조건
    • 테이블 레벨 제약 조건
      CREATE TABLE [name]
    	( number VARCHAR(4) UNIQUE,
          name VARCHAR(10),
          CONSTRAINT [ condition name ] UNIQUE ( [unique value] )
        );
  • 제약 조건의 추가
    • ALTER TABLE [name] ADD CONSTRAINT [condition name] UNIQUE( [unique value] );
    • 추가를 위해서는, 해당 컬럼에 unique 제약 조건에 위배되는 데이터가 없어야 한다.
  • 제약 조건의 삭제
    • ALTER TABLE [name] DROP CONSTRAINT [condition name];

Primary Key 제약 조건

  • 제약 조건의 생성
    • Row 레벨 제약 조건
    • 테이블 레벨 제약 조건
CREATE TABLE [name]
	( number VARCHAR(4) NOT NULL Primary Key,
      name VARCHAR(10),
      CONSTRAINT PRIMARY KEY ( [unique value] )
    );
  • 제약 조건의 추가

    • 기존 Primary Key 가 없는 테이블에 추가할 수 있다.
    • ALTER TABLE [name] ADD PRIMARY KEY( [col] );
  • 제약 조건의 삭제

    • ALTER TABLE [name] DROP PRIMARY KEY

Foreign Key 제약 조건

  • 제약 조건의 생성

    • 테이블 레벨 제약 조건
    CREATE TABLE [name] 
    ( number VARCHAR(4) NOT NULL Primary key,
      dept VARCHAR(4) NOT NULL,
      salary VARCHAR(10),
      CONSTRAINT [ condition name ] FOREIGN KEY ([val])
      REFERENCES [reference table] ( [val] );
  • 제약 조건의 추가

    • 추가도 마찬가지로 부모 테이블의 컬럼에 존재하는 데이터만 저장될 수 있다.
    • ALTER TABLE [name] ADD CONSTRAINT [condition name] FOREIGN KEY ( [val] ) REFERENCES [ 상위 table ]( [val] );
  • 제약 조건의 삭제

    • ALTER TABLE [name] DROP CONSTRAINT [val]

Check 제약 조건

  • 제약 조건의 생성
    CREATE TABLE [name]
    ( number VARCHAR(4),
    salary INT CHECK(salary > 0),
    name VARCHAR(8),
    CONSTRAINT [condition name] CHECK ( [condition] )
    );
  • 제약 조건의 수정
    • ALTER TABLE [name] ADD CONSTRAINT [val] CHECK ( [condition]);
  • 제약 조건의 삭제
    • ALTER TABLE [name] DROP CONSTRAINT [val]

제약 조건 확인

  • information_schema 정보 테이블의 조회
  1. table_constraints : 테이블별 제약 조건 조회
    • FROM information_schema.table_constraints 로 확인
    • 제약 조건의 이름과 타입 등을 확인할 수 있다.
  2. columns : 단일 컬럼 제약 조건 등 컬럼 정보 조회
    • FROM information_schema.columns로 확인
    • is_nullable, column_key(인덱스 타입: PRI, UNI, MUL) 등이 표시됨.
  3. key_column_usage : primary key를 기준으로 foreign key 정보 조회
  • Foreign Key 제약 조건 정보 조회
  • FROM information_schema.key_column_usage
    • ref_table_name: foreign key가 참조하는 테이블 이름
    • ref_col_name: foreign key 가 참조하는 컬럼 이름
  1. check_constraints : 테이블별 check 제약 조건 정보 조회
    • FROM information_schema.check_constraints
      - constraint_name: 제약 조건 이름
      - check_clause : 제약 조건을 지정하는 식
profile
분명히 처음엔 데린이었는데,, 이제 개린이인가..

0개의 댓글