- 제약조건(Constraint)
- DBMS는 데이터의 무결성을 보장하기 위해, 잘못된 데이터가 저장되는 것을 방지하기 위해 사용한다.
- 제약조건은 테이블의 컬럼에 설정하여 사용한다.
- 해당 컬럼에 설정된 제약조건에 위배된 데이터가 들어오는 경우 에러가 발생한다.
- 데이터 무결성(Integrity) : 저장된 데이터에는 잘못된 데이터가 없어야 한다.
- 제약조건 종류
- NOT NULL
- 이 조건이 설정된 컬럼에는 NULL 입력 불가
- UNIQUE
- 이 조건이 설정된 컬럼에는 중복값 입력 불가
- PRIMARY KEY
- 테이블당 단 1개 설정 가능, 데이터의 유일성 보장 NOT NULL + UNIQUE의 의미
- FOREIGN KEY
- 다른 테이블의 컬럼을 참조해서 무결성 검사, 외래키 값은 NULL 혹은 참조할 수 있는 값이어야 한다.
- CHECK
- 설정된 값만 입력 허용
- NOT NULL
- 무결성 종류
- 릴레이션 : 테이블
- 속성 : 컬럼
- 튜플 : 레코드, row
- 널 무결성
- 릴레이션의 속성값이 NULL이 될 수 없다.
- NOT NULL
- 릴레이션의 속성값이 NULL이 될 수 없다.
- 고유 무결성
- 특정 속성에 속한 값은 서로 달라야 한다.
- UNIQUE
- NOT NULL
- PRIMARY KEY
- 특정 속성에 속한 값은 서로 달라야 한다.
- 참조 무결성
- 외래키 값은 NULL 이거나, 참조 할 수 없는 외래키 값을 가질 수 없다.
- FOREIGN KEY
- 외래키 값은 NULL 이거나, 참조 할 수 없는 외래키 값을 가질 수 없다.
- 도메인 무결성
- 특정 속성의 값은 그 속성이 정의된 도메인에 속한 값이어야 한다.
- CHECK
- DEFAULT
- NOT NULL
- 특정 속성의 값은 그 속성이 정의된 도메인에 속한 값이어야 한다.
- 관계 무결성
- 릴레이션
- ON DELETE
- ON UPDATE
- 릴레이션
- 개체 무결성
- PRIMARY KEY
- 제약조건을 설정하는 방법
- 테이블 생성시 동시에 제약조건을 설정하는 방법
- 테이블 생성 후 제약조건을 추가하는 방법
- 제약조건명
- 제약조건을 활성화/비활성화 하는 등의 관리가 필요할 떄가 발생하는데 제약조건을 관리하려면 제약조건에 이름을 붙여서 관리해야한다.
- CREATE TABLE test (name varchar2(10) CONSTRAINT test_name_pk PRIMARY KEY);
- 제약조건을 활성화/비활성화 하는 등의 관리가 필요할 떄가 발생하는데 제약조건을 관리하려면 제약조건에 이름을 붙여서 관리해야한다.
- 제약조건 조회
- 딕셔너리(Dictionary)
- 스키마, 사용자, 객체, 권한, 롤, 데이터베이스의 정보 등, 데이터베이스를 운영하는데 필요한 정보를 관리하는 별도의 객체들
- 사용자 딕셔너리
- USER_CONSTRAINT 와 USER_CONS_COLUMNS 사용
- DB 전체 딕셔너리
- DBA_CONSTRAINT 와 DBA_CONSTRAINT_COLUMNS 사용
- 딕셔너리(Dictionary)
- 테이블 생성 후 제약조건 추가하기
- ALTER 명령어를 사용하여 테이블에 제약조건 추가 가능
- ALTER TABLE test ADD CONSTRAINT test_name_uk UNIQUE(name);
- NOT NULL로 제약조건을 추가할 때는 컬럼의 기본값이 NULL로 설정되어 있기 때문에 ADD가 아닌 MODIFY로 컬럼의 제약조건을 추가해야한다.
- ALTER TABLE test MODIFY (name CONSTRAINT test_name_nn NOT NULL);
- 외래키 설정시
- 참조되는 부모테이블의 컬럼은 PRIMARY KEY 이거나 UNIQUE 이어야 한다.
- FK를 설정한 후 부모테이블의 데이터를 지우고 싶을 경우 자식테이블에서 부모테이블의 해당 데이터를 참조하고 있으면 지울 수 없다.
- FK를 생성할 떄 ON DELETE CASCADE 옵션을 주면 부모테이블의 데이터가 지워질 떄 자식테이블의 데이터도 함께 지울 수 있다.
- ON DELETE SET NULL 옵션을 주면 부모테이블의 데이터가 지워질 떄 자식 테이블을 NULL 값으로 설정하게 된다.
- ON UPDATE 에도 옵션을 부여할 수 있다. (ORACLE은 불가능)
- ALTER 명령어를 사용하여 테이블에 제약조건 추가 가능
- ON DELETE, ON UPDATE 옵션
- NO ACTION
- 참조테이블(부모테이블)에 변화가 있어도 자식테이블에 아무런 조치를 취하지 않는다.
- CASCADE
- 참조테이블의 데이터가 삭제되면 자식테이블의 관련 데이터도 모두 삭제
- 참조테이블의 데이터가 변경되면 자식테이블의 관련 데이터도 모두 변경
- SET NULL
- 참조테이블의 변화가 있으면 자식테이블의 관련데이터는 NULL로 변경한다.
- SET DEFAULT
- 참조테이블의 변화가 있으면 자식테이블의 관련 데이터는 기본데이터로 변경한다.
- NO ACTION