[SQL] 27. 제약

uuuu.jini·2023년 2월 1일
0

SQL 첫걸음

목록 보기
27/36
post-thumbnail

테이블에 제약을 설정함으로써 저장될 데이터를 제한할 수 있다.

  • NOT NULL
  • 기본키 제약
  • 외부 참조 제약

1. 테이블 작성시 제약 정의


CREATE TABLE로 작성할 때 제약을 같이 정의한다.
ALTER TABLE로 제약을 지정하거나 변경이 가능하다.
NOT NULL 제약 등 하나의 열에 대해 설정하는 제약은 열을 정의할 때 지정한다.

  • NOT NULL 제약과 UNIQUE 제약 설정 예
CREATE TABLE sample631 (
	a INTEGER NOT NULL,
    b INTEGER NOT NULL UNIQUE,
    c VARCHAR(30)
);

열에 대한 제약을 열 제약 이라 부른다.
한 개의 제약으로 복수의 열에 제약을 설명하는 경우 테이블 제약 이라 부른다.

CREATE TABLE sample631 (
	no INTEGER NOT NULL,
    sub_no INTEGER NOT NULL UNIQUE,
    name VARCHAR(30)
    PRIMARY KEY(no, sub_no)
);
  • CONSTRAINT 키워드: 제약에 이름 붙이기, (제약에 이름을 붙이면 나중에 처리 쉬움)
CREATE TABLE sample631 (
	no INTEGER NOT NULL,
    sub_no INTEGER NOT NULL UNIQUE,
    name VARCHAR(30)
    CONSTRAINT pkey_sample PRIMARY KEY(no, sub_no)
);

2. 제약 추가


기존 테이블에도 나중에 제약을 추가할 수 있다.

- 열 제약 추가

열 제약 추가 시 ALTER TABLE로 열 정의를 변경할 수 있다. 기존 테이블 변경 시 제약을 위반하는 데이터 먼저 검사한다.

  • c 열에 NOT NULL 제약 설정 예
    ALTER TABLE sample631 MODIFY c VARCHAR (30) NOT NULL;

- 테이블 제약 추가

ALTER TABLE의 ADD 하부 명령으로 추가 가능
열 제약 추가와 마찬가지로 기존의 행 검사하여 추가할 제약 위반 데이터 존재시 에러 발생
ALTER TABLE sample631 ADD CONSTRAINT pkey_sample PRIMARY KEY(a);

3. 제약 삭제


  • 열 제약 삭제: 제약 추가와 동일하게 열 정의 변경
    ALTER TABLE sample631 MODIFY c VARCHAR(30);

  • 테이블 제약 삭제: DROP 하부 명령 사용 (제약명 지정)
    ALTER TABLE smaple631 DROP CONSTRAINT pkey_sample631;

  • 기본키 삭제인 경우
    ALTER TABLE sample631 DROP PRIMARY KEY;

4. 기본키


기본키로 지정할 열은 NOT NULL 제약이 설정되어 있어야 한다.

  • 검색키: 대량의 데이터에서 원하는 데이터를 찾아낼 때 키가 되는 요소를 지정해 검색
  • 기본키: 테이블의 행 한개를 특정할 수 있는 검색키, 기본키로 설정된 열이 중복하는 데이터 값을 가지는 경우 제약에 위반됨

UPDATE 명령 실행시에도 제약 위반 값 검사 수행

기본키로 지정해 유일한 값을 가지도록 하는 구조가 기본키 제약 (유일성 제약)

- 복수의 열로 기본키 구성

기본키 구성 열은 복수라도 상관 없다. 복수의 열로 기본키로 지정했을 경우 키를 구성하는 모든 열을 사용해서 중복하는 값이 있는지 없는지를 검사한다.

profile
멋쟁이 토마토

0개의 댓글