데이터베이스 - 제약조건 관리

제약조건 관리


제약조건 추가
이미 테이블을 만든 상태에서 새롭게 제약 조건을 추가하는 것도 가능하다. 이 때 사용하는 것은 alter문이다. 문법은 다음과 같다.




이제 alter문을 사용해서 제약조건을 추가해보도록 하겠다.


먼저 테이블을 하나 만들어주자. 사원 번호에 대해서 일단 primary key를 적용한다.


이 테이블에 대해서 alter문을 통해 foreign key를 추가해보도록 하겠다. primary key인 사원번호에 대해서 참조하도록 한다.


제대로 제약 조건이 추가되었는지 확인해보자.
P 타입의 primary key 제약 조건뿐만 아니라 R 타입의 foreign key 제약 조건 역시 추가되었음을 확인할 수 있다.

제약 조건 삭제


제약 조건을 삭제하는 경우 역시 alter ~ drop constraint 문을 사용한다.


위에서 생성했던 제약 조건을 한번 지워보도록 하자.


제대로 삭제가 되었는지 확인하자.


cascade 조건



만약에 primary key를 삭제한다면 어떻게 될까?


당연히 앞서서 배웠 듯이 참조하고 있는 foreign key가 존재하기 때문에 오류 메시지를 출력할 것이다.


하지만 primary key를 삭제하는 동시에 이를 참조하고 있던 foreign key까지 한번에 삭제하는 방법이 있다. 이를 cascade 조건이라고 한다.


위에서 만들었던 사원 테이블에서 다시 foreign key를 추가하고 다음의 명령을 실행해보자.


primary key를 삭제하는데 일단 오류 메시지가 출력되지 않는다. 그리고 해당 제약 조건을 참조했을 때, primary key 뿐만 아니라 foreign key까지 모두 삭제되는 것을 확인할 수 있다.

제약조건 비활성화 / 활성화
우리가 만든 제약조건에 대해서 삭제, 추가 외에도 비활성화, 그리고 이를 다시 활성화할 수 있다. 이에 대해서 알아보도록 하겠다.


다시 사원 테이블을 만들자.


이에 대해 일단 비활성화를 해보도록 하겠다. 이 때 disable을 사용한다. 그리고 이 때 삭제 시 사용했던 cascade 조건을 통해서 참조하고 있는 다른 제약 조건에 대해서도 한번에 비활성화를 할 수 있다.


이번엔 이를 다시 활성화시키도록 하자. 이 땐 enable을 사용한다.


이제 데이터를 통해서 비활성화와 활성화가 잘 이루어져 있는지 살펴보도록 하겠다. 일단 행 데이터를 몇 개 넣어보자.


그리고 이제 중복된 데이터를 넣겠다.


일단 primary key로 인해 오류가 발생한다.


이제 primary key를 비활성화하고 다시 넣어보겠다.
primary key가 비활성화되었기 때문에 중복된 데이터가 입력되고 있다. 하지만 이 상태에서 primary key를 다시 활성화시키면 어떻게 될까?


다음과 같은 오류를 출력하고 있다. 즉 primary key가 다시 활성화되기 전에 테이블의 데이터에 대해서 검사를 진행한다. 그리고 만약에 제약 조건에 위배하는 데이터가 존재한다면 활성화작업을 취소하고 오류를 출력한다.


따라서 다시 primary key를 활성화시키기 위해서는 일단 중복된 데이터를 제거해주어야 한다. 제거하고 다시 활성화시켜보자.

이제 오류가 발생하지 않는다.

댓글

이 블로그의 인기 게시물

데이터베이스 PL/SQL - 배열과 테이블

데이터베이스 PL/SQL 변수선언

데이터베이스 PL/SQL 제어문 - 반복문