예약어 : CONSTRAINT
(1)NOT NULL
: NULL 로 입력이 되어서는 안되는 칼럼에 부여하는 조건으로
칼럼 레벨에서 만 부여할수 있는 제약조건
--> 테이블 제약조건 문법이 없음 -> MODIFY 사용
‘MODIFY + 칼럼명 + 칼럼레벨 제약조건 작성법’ 으로 작성
(2)UNIQUE KEY (유일키)
: 저장된 값이 중복되지 않고 오직 유일하게 유지되어야
할때 사용하는 제약조건이다. (NULL 은 허용된다)
(3)PRIMARY KEY (대표키)
: NOT NULL 조건과 UNIQUE KEY 를 합친 조건
(4)CHECK : 조건에 맞는 데이터만 입력되도록 조건을 부여하는 제약 조건
CHECK( loc IN('SEOUL', 'BUSAN'))
(5)FOREIGN KEY (외래키)
: 부모 테이블의 PRIMARY KEY 를 참조하는 칼럼에 붙이는 제약조건
(ex emp 테이블의 deptno 칼럼)
.
SQL> CREATE TABLE dept2(
2 deptno NUMBER(2) CONSTRAINT dept2_deptno_pk PRIMARY KEY,
3 dname VARCHAR2(12) CONSTRAINT dept2_deptno_nn NOT NULL,
4 loc VARCHAR2(12) CONSTRAINT dept2_loc_ck CHECK( loc IN('SEOUL', 'BUSAN'))
5 );
칼럼명 + 데이터 속성 + CONSTRAINT + 제약조건이름 + 제약조건명
제약조건 생성 후 데이터를 넣을 때
SQL> INSERT INTO dept2
2 (deptno, dname, loc)
3 VALUES(10, 'SALES', 'SEOUL');
제약조건에 위배되지 않게 데이터를 넣어준다 !
제약조건에 위배되는 경우
1 이미 존재하는 값 넣음
SQL> INSERT INTO dept2
2 VALUES(10, 'XXX', 'SEOUL');
INSERT INTO dept2
*
1행에 오류:
ORA-00001: 무결성 제약 조건(SCOTT.DEPT2_DEPTNO_PK)에 위배됩니다
2 primary key 안적음
SQL> INSERT INTO dept2
2 (dname, loc)
3 VALUES('XXX', 'SEOUL');
INSERT INTO dept2
*
1행에 오류:
ORA-01400: NULL을 ("SCOTT"."DEPT2"."DEPTNO") 안에 삽입할 수 없습니다
3 부서명 집어넣지 않음
SQL> INSERT INTO dept2
2 VALUES(20, NULL, 'SEOUL');
VALUES(20, NULL, 'SEOUL')
*
2행에 오류:
ORA-01400: NULL을 ("SCOTT"."DEPT2"."DNAME") 안에 삽입할 수 없습니다
4 체크제약조건 오류
SQL> INSERT INTO dept2
2 VALUES(20, 'SALES', 'INCHON');
INSERT INTO dept2
*
1행에 오류:
ORA-02290: 체크 제약조건(SCOTT.DEPT2_LOC_CK)이 위배되었습니다
---> 잘못된 데이터가 들어가는 것을 방지 , 신뢰도 ↑↑↑
SQL> CREATE TABLE test(
2 num NUMBER,
3 name CHAR(10),
4 deptno NUMBER(2),
5 CONSTRAINT test_num_pk PRIMARY KEY(num),
6 CONSTRAINT test_name_u UNIQUE(name),
7 CONSTRAINT test_name_fk FOREIGN KEY(deptno) REFERENCES dept(deptno));
NOT NULL 제약조건 : 테이블 레벨에서 정의할 수 없음 * **
기본적으로
CREATE : 어떤 객체를 만들 때
DROP : 어떤 객체를 삭제할 때
ALTER : 어떤 객체를 변경할 때
제약조건 나중에 추가하는 것은 객체를 변경하는 것이므로 ALTER를 이용해서 추가한다 !