SQL CONSTRAINT(제약조건)
- 데이터에 관한 규칙을 지정하는데 사용
- 테이블에 저장될 데이터의 무결성, 즉 데이터의 정확성과 일관성을 유지하기 위함
- 데이터에 결손과 부정합이 없음을 보증하기 위해 해놓는 장치
- 테이블 생성 시 정의해야 할 필수 요소는 아니지만 데이터가 많이 쌓인 후에 정의하려고 하면 골치 아파지므로 초기에 정의해주는 것이 바람직함
CONSTRATINT
뒤에 제약조건의 ID를 부여할 수 있음
CONSTRATINT
를 생략할 시 제약 ID를 자동으로 시스템에서 생성해 줌
1. 제약조건의 종류
-
PRIMARY KEY(기본키)
- 테이블에 저장된 각각의 Row에 대한 고유성을 보장한다.
- 한 테이블에 한 개씩만 정의할 수 있다.
- 생성하지 않는 것도 가능하다.
- PK(PRIMARY KEY)로 지정된 컬럼에는 NULL 값이 입력될 수 없고 자동으로 UNIQUE 인덱스로 생성된다.
-
FOREIGN KEY(외래키)
- 하나의 테이블이 다른 테이블을 참조하고자 할 때 FK(FOREIGN KEY)를 정의해준다.
- NULL 값을 가질 수 있다.
- 한 테이블에 여러 개 존재할 수 있다.
-
UNIQUE KEY(고유키)
- PRIMARY KEY와 유사하게 테이블에 저장된 각각의 Row에 대한 고유성을 보장하기 위한 제약조건이지만 NULL값이 허용된다는 차이점이 있다.
-
NOT NULL
- 해당 컬럼에서 NULL 값이 입력되는 것을 허용하지 않는 제약조건이다.
-
CHECK
-
CREATE INDEX
- 데이터베이스에서 데이터를 매우 빠르게 생성하고 검색하는 데 사용한다.
2. 제약 변경
-
제약 추가
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건(컬럼명);
-
제약 수정
ALTER TABLE 테이블명 MODIFY 컬럼명 컬럼조건;
-
제약 삭제
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
3. 제약 활성 / 비활성
ALTER TABLE 테이블명 ENABLE CONSTRAINT 제약조건;
ALTER TABLE 테이블명 DISABLE CONSTRAINT 제약조건;
4. 참조 무결성 규정 관련 옵션
Delete(Modify) Action
- CASCADE: Parent 값 삭제 시 Child 값 같이 삭제
- SET NULL: Parent 값 삭제 시 Child의 해당 컬럼(필드) NULL 처리
- SET DEFAULT: Parent 값 삭제 시 Child의 해당 컬럼 DEFAULT 값으로 변경
- RESTRICT: Child 테이블에 해당 데이터가 PK로 존재하지 않는 경우에만 Parent값 삭제 및 수정 가능
-NO ACTION: 참조 무결성 제약이 걸려있는 경우 삭제 및 수정 불가
Insert Ation
- AUTOMATIC: Parent 테이블에 PK가 없는 경우 Parent PK를 생성 후 Child 입력
- SET NULL: Parent 테이블에 PK가 없는 경우 Child 외부 키를 NULL 값으로 처리
- SET DEFAULT: Parent 테이블에 PK가 없는 경우 Child 외부 키를 지정된 기본값(DEFAULT 값)으로 입력
- DEPENDENT: Parent 테이블에 PK가 존재할 때만 Child 입력 허용
- NO ACTION: 참조 무결성을 위반하는 입력 액션을 취하지 않음
참고 자료