티스토리 뷰

반응형

* 제약조건(CONSTRAINT)

 

- 제약조건은 결점 없이 정확하고 유효한 데이터가 데이터베이스에 저장될 수 있도록 하기 위하여 데이터를 조작하는데 한계를 규정한 것이다.

- 즉, 사용자가 원하는 데이터만 걸러내도록 조건을 만드는 것을, 제약조건을 건다라고 말한다.

- 제약조건을 걸때 CONSTRAINT를 사용한다.

- CONSTRATINT 뒤에 제약조건의 ID를 부여할 수 있다.

- CONSTRATINT를 생략할 시 제약 ID를 자동으로 오라클 시스템에서 생성해준다.

- 기본형태

CONSTRAINT 기본형태

 CONSTRAINT 제약id 제약내용(칼럼명);

 

 

- 예시

 

 

 

 

 

* 제약 변경

 

- 제약조건을 주지 않아 추가하거나, 제약조건을 변경, 삭제 하는 경우 ALTER 명령문을 이요하여 변경이 가능하다.

- 기본형태

 추가 기본형태

 ALTER TABLE 테이블명 ADD CONSTRAINT 제약이름 제약조건;

 수정 기본형태

 ALTER TABLE 테이블명 MODIFY 컬럼조건; 

 삭제 기본형태

 ALTER TABLE 테이블명 DROP CONSTRAINT 제약이름;

 

 

 

 

 

* 제약 변경 예제

 

1. 테이블 생성

- 먼저 새로운 테이블을 생성한다. 컬럼들을 넣되 아무 제약조건도 넣지 않는다.

 

 

 

 

 

2. 제약 추가

- NUM 컬럼에 기본키를 넣는 제약조건을 추가한다. 한번 추가한 컬럼에 다시 제약을 추가하지 못한다.

- 이때, 기본키 제약조건 id를 PK 라고 설정한다.

 

ALTER TABLE 테이블명 ADD CONSTRAINT 제약 이름 제약 조건(컬럼명);

 

 

 

 

3. 제약 수정

- NAME 컬럼에 NOT NULL 제약조건을 추가한다. 제약을 추가한후 다시 제약수정을 하면 내가 원하는 제약으로 수정이 가능하다.

 

 

ALTER TABLE 테이블명 MODIFY 컬럼명 컬럼조건;

 

 

 

 

 

 

4. 제약 삭제(키이름을 알때)

- 처음에 추가했던 기본키 id인 PK를 삭제한다. PK를 삭제하면 기본키 제약이 삭제된다.

 

 

ALTER TABLE 테이블명 DROP CONSTRAINT 제약이름;

 

 

 

 

 

5. 제약 삭제(키이름을 모를때)

- 제약을 삭제하려면 반드시 제약의 id가 필요하다. 오라클은 제약 id를 입력하지 않으면 자체 시스템에서 자동적으로 임의의 id를 부여해준다.

- 제약 id를 모를때 id를 검색하여 오라클에서 자동으로 생성해준 id를 찾아내 삭제를 해야한다.

- id 조회방법

SELECT * FROM USER_CONS_COLUMNS WHERE TABLE_NAME = '테이블명'; 

 

 

 

 

 

 

 

 

* 제약 비활성

 

- 제약 비활성은 제약 조건을 삭제하지 않고도 제약 조건을 비활성화하여 사용을 잠시 보류할 수 있도록 하는 기능이다.

- 제약 조건이 설정되면 항상 그 규칙에 따라 데이터 무결성이 보장된다. 특별한 업무를 수행하는 과정에서 이러한 제약 조건 때문에 작업이 진행되지 못하는 경우에는 제약 조건을 비활성화 하여 작업을 처리한 후 다시 제약 조건을 활성화 할 수 있다.

 

 제약 비활성

 ALTER TABLE 테이블명 DISABLE CONSTRAINT 제약조건;

 제약 활성

 ALTER TABLE 테이블명 ENABLE CONSTRAINT 제약조건; 

 

 

 

 

* CASCADE CONSTRAINTS

 

- 데이터베이스 내의 임의의 다른 테이블과 PRIMARY KEY 또는 FOREIGN KEY로서의 관계가 여전히 존재하는 경우 PRIMARY KEY가 존재하는 테이블을 마음대로 제거 및 비활성화 할 수 없다.

- 즉, 부모 테이블과 자식테이블 간에 참조 설정이 되어 있을때 부모 테이블의 제약 조건을 비활성화 시키면서 이를 참조하고 있는 자식 테이블의 제약 조건까지 함께 비활성화시키기 위해 사용한다.

- 또한 부모 테이블만 삭제하고 싶을 경우, 원래는 자식테이블을 먼저 삭제하고 부모를 삭제 한 뒤 자식테이블을 다시 만들어야하는 번거로움이 따른다.

- 하지만 CASCADE를 쓰면 일시적으로 참조관계를 끊을수 있다.

 

 

 

- 강제로 참조관계를 끊고 부모 테이블을 삭제하는 법

 

CASCADE 기본형식 

 DROP TABLE 테이블명 CASCADE CONSTRAINTS;

 

 

 

 

 

- 강제로 참조관계를 끊고 부모 테이블의 제약조건을 비활성화 하는 법

 

 CASCADE 기본형식

ALTER TABLE 테이블명 DROP 제약조건 CASCADE; 

 

반응형

'Database' 카테고리의 다른 글

[SQL] 서브쿼리(Sub-Query)  (0) 2018.04.25
[SQL] 조인(JOIN)  (0) 2018.04.24
[SQL] 무결성, 제약조건  (3) 2018.04.24
[SQL] 키(슈퍼키,대체키,후보키,기본키,외래키)  (8) 2018.04.24
[SQL] Transaction(트랜잭션)  (1) 2018.04.24
댓글
공지사항