-------------------------------------
제약조건
-------------------------------------
제약조건-종류
* 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 |