database/oracle

제약조건

labj 2012. 3. 21. 20:53

-------------------------------------

제약조건

-------------------------------------

제약조건-종류
* NOT NULL - NULL을 허용하지 않는다.
* CHECK - 조건에 맞는 값만을 허용한다.
* UNIQUE - 중복된 값을 허용하지 않는다.
* PRIMARY KEY - 각 행을 유일하게 식별하는 단일 혹은 결합 필드를 명시한다.
* FOREIGN KEY - 값이 참조하고 있는 테이블의 Primary Key 내에 존재하는 것을 보장한다.

 

 

* 학생
CREATE  TABLE student (
 stu_id CHAR(5) CONSTRAINT student_stu_id_pk PRIMARY KEY
   CONSTRAINT student_stu_id_ck CHECK(LENGTH(TRIM(' ' FROM stu_id)) = 5 ),
 stu_name VARCHAR(10) CONSTRAINT student_stu_name_nn NOT NULL
);

 

* 과목
CREATE TABLE subject (
 sub_id NUMBER(3) CONSTRAINT subject_sub_id_pk PRIMARY KEY,
 sub_name VARCHAR(20) CONSTRAINT subject_sub_name_nn NOT NULL
);

 

* 점수
CREATE TABLE score (
 stu_id CHAR(5) CONSTRAINT score_stu_id_nn NOT NULL,
 sub_id NUMBER(3) CONSTRAINT score_sub_id_nn NOT NULL,
 score NUMBER(3) CONSTRAINT score_score_nn NOT NULL,
 grade CHAR(1) CONSTRAINT score_grade_ch CHECK(grade IN ('A', 'B', 'C', 'D', 'F')),
CONSTRAINT score_pk PRIMARY KEY (stu_id, sub_id),
CONSTRAINT score_fk1 FOREIGN KEY (stu_id) REFERENCES student(stu_id) ON DELETE CASCADE,
CONSTRAINT score_fk2 FOREIGN KEY (sub_id) REFERENCES subject(sub_id) ON DELETE CASCADE
);

 

- ON DELETE CASCADE : student 의 foreign key를 삭제 할 때 score에 값이 있더라도 제약 없이 student와 score가 같이 삭제되도록 한다.

 

 

* 제약 조건 비 활성화
ALTER TABLE score DISABLE CONSTRAINT score_pk;
ALTER TABLE score DISABLE PRIMARY KEY;
ALTER TABLE score DISABLE CONSTRAINT score_grade_ck;
ALTER TABLE subject DISABLE UNIQUE(sub_id) CASCADE;
ALTER TABLE subject DISABLE CONSTRAINT subject_sub_id_uk CASCADE;

 

 

* 제약 조건 비 활성화
ALTER TABLE score ENABLE CONSTRAINT score_pk;
ALTER TABLE score ENABLE PRIMARY KEY;
ALTER TABLE score ENABLE CONSTRAINT score_grade_ck;
ALTER TABLE subject ENABLE UNIQUE(sub_id) ;
ALTER TABLE subject ENABLE CONSTRAINT subject_sub_id_uk ;

 

 

* 제약조건을 추가, 삭제

- 추가
ALTER TABLE score
ADD ( CONSTRAINT score_score_ck1 CHECK(score > -1),
 CONSTRAINT score_score_ck2 CHECK(score < 101) );

 

- 삭제
ALTER TABLE score DROP CONSTRAINT score_score_ck1;
ALTER TABLE score DROP PRIMARY KEY;
ALTER TABLE student DROP UNIQUE(sub_id) CASCADE;


 

 

* 제약조건 관련 Dictionary
SELECT constraint_name, constraint_type, status, validated,
 TO_CHAR(last_change, 'yyyy-mm-dd hh24:mi:ss')
FROM user_constraints
WHERE table_name IN ('STUDENT', 'SUBJECT', 'SCORE')
ORDER BY constraint_name;

 

 

 

 

'database > oracle' 카테고리의 다른 글

View 생성, 변경 및 제거  (0) 2012.03.21
100만건 이상(대량)의 데이터에서 중복키를 확인하도록 하는 방법  (0) 2012.03.21
TABLESPACE 정보 조회  (0) 2012.03.21
TABLESAPCE 이해2  (0) 2012.03.21
TABLESPACE 이해  (0) 2012.03.21