CONSTRAINTS - 데이터의 무결성을 보장
PRIMARY-KEY : 하나의 행에서 그 행을 대표하는 컬럼이며 FOREIGN-KEY컬럼이 참조 하는 컬럼은
반드시 PRIMARY-KEY 컬럼이어야 한다.
FOREIGN-KEY : 입력되어야 할 값이 다른 테이블의 PRIMARY-KEY 컬럼인 컬럼
CHECK : 입력되어야 할 값이 정해져 있는경우 직접 정의 할수 있다.
UNIQUE : 컬럼의 값이 테이블 전체에서 유일한 값이어야 하는경우
NOT NULL : 컬럼에 NULL값이 입력되어서는 안되는 경우
테이블 생성
CREATE TABLE DEPT1
(DEPTNO NUMBER PRIMARY KEY,
DNAME VARCHAR2(20) UNIQUE,
LOC VARCHAR2(20));
CREATE TABLE EMP1
(EMPNO NUMBER(4) CONSTRAINT EMP1_EMPNO_PK PRIMARY KEY,
ENAME VARCHAR2(20) NOT NULL,
SAL NUMBER(7,2),
DEPTNO NUMBER,
CONSTRAINT EMP1_SAL_CK CHECK (SAL BETWEEN 500 AND 5000),
CONSTRAINT EMP1_DEPTNO_FK FOREIGN KEY(DEPTNO)
REFERENCES DEPT1(DEPTNO))
SQL> --컬럼명 DATATYPE 제약종류
SQL> --DEPTNO NUMBER PRIMARY KEY
SQL> --COLUMN LEVEL 정의 방식
SQL> --컬럼명 DATATYPE CONSTRAINT 제약명 제약종류
SQL> --컬럼명 DATATYPE [CONSTRAINT 제약명]생략가능 제약종류
SQL> --EMPNO NUMBER(4) CONSTRAINT EMP1_EMPNO_PK PRIMARY KEY
SQL> --생략시 SYS_Cn형식으로 자동 지정,
SQL> --TABLE LEVEL 정의방식
SQL> --컬럼명 DATATYPE,
SQL> --컬럼명 DATATYPE,
SQL> --컬럼명 DATATYPE,
SQL> --CONSTRAINT 제약명 제약종류 (컬럼명)
SQL> -- DATA DICT 조회
SQL> DESC USER_CONSTRAINTS
SQL> -- 폭조정,
SQL> COL SEARCH_CONDITION FORMAT A25
SQL> SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, SEARCH_CONDITION
2 FROM USER_CONSTRAINTS
3 WHERE TABLE_NAME IN ('EMP1','DEPT1');
CONSTRAINT_NAME C SEARCH_CONDITION
------------------------------ - -------------------------
SYS_C003005 P
SYS_C003006 U
SYS_C003007 C "ENAME" IS NOT NULL
EMP1_SAL_CK C SAL BETWEEN 500 AND 5000
EMP1_EMPNO_PK P
EMP1_DEPTNO_FK R (레퍼런스 FOREIGN KEY)
6 개의 행이 선택되었습니다.
제약추가
SQL> ALTER TABLE DEPT1
2 ADD CONSTRAINT DEP1_LOC_UK UNIQUE (LOC);
제약삭제
SQL> DROP CONSTRAINT DEPT1_LOC_UK
SQL> -- NOT NULL ==> CHECK 특수한 일종
SQL> -- NOT NULL == TABLE LEVEL 정의방식 사용 X
SQL> ALTER TABLE DEPT1
2 MODIFY (LOC VARCHAR2(20) NOT NULL);
테이블이 변경되었습니다.
SQL> -- 스스로 변경이 안되 MODIFY에 묻어가기!
SQL> DESC DEPT1
이름 널? 유형
----------------------------------------- -------- -------------
DEPTNO NOT NULL NUMBER
DNAME VARCHAR2(20)
LOC NOT NULL VARCHAR2(20)
SQL> -- PK == NOT NULL + UNIQUE
'Programing > Oracle' 카테고리의 다른 글
Oracle - INDEX (0) | 2008.07.29 |
---|---|
Oracle - VIEW (0) | 2008.07.29 |
Oracle - DDL(DATA DEFINITION LANGUAGE) (0) | 2008.07.29 |
Oracle - DATA DICTIONARY (관리용 테이블) (0) | 2008.07.29 |
Oracle - join 문제 (0) | 2008.07.29 |