2017. 7. 2. 21:32
CONSTRAINT 제약조건 C. Oracle2017. 7. 2. 21:32
CONSTRAINT [제약조건] (데이타의 무결성을 지키기 위해서 만듬)
PRIMARY KEY
: 여러개의 컬럼중에 대표되는(고유의값) 컬럼
: 여러개의 컬럼중에 대표되는(고유의값) 컬럼
: 관계형 데이타베이스에서는 primary key가 되는 컬럼이 꼭 있어야 한다.
NOT NULL
: NULL값을 가져서는 안되는컬럼, 이조건이 없으면 null값을 허용한다.
: NULL값을 가져서는 안되는컬럼, 이조건이 없으면 null값을 허용한다.
CHECK
: 특정한 제약이 값을 만족하는지.., column에 입력되는 data를 검사해서 조건에 맞는 data만 들어오도록
할때 사용
: 특정한 제약이 값을 만족하는지.., column에 입력되는 data를 검사해서 조건에 맞는 data만 들어오도록
할때 사용
UNIQUE
: 중복된 값을 가질수 없다, 고유의 값을 갖는다.
: 중복된 값을 가질수 없다, 고유의 값을 갖는다.
FOREIGN KEY
: 어떠한값을 항상 참조해야한다.
: 어떠한값을 항상 참조해야한다.
primary키(부모키,parent key, master key)와의 관계속에 존재한다.
제약조건 주기
1. 컬럼 레벨 정의 방식 : 컬럼명 데이타_TYPE 제약종류,
or
컬럼명 데이타_TYPE constraint 제약명 제약종류
만약 제약명을 생략하면 오라클이 임의로 sys_c 숫자 형식으로 지정한다.
ex) create table dept1
(deptno number primary key,
(deptno number primary key,
dname varchar2(20) unique,
loc varchar2(20));
2. 테이블 레벨 정의 방식 : 컬럼명 데이타_TYPE,
컬럼명 데이타_TYPE,
constraint 제약명 제약종류 (컬럼명)
ex) 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)); 행의 deptno가 foreign key이기 때문에 참조하는 값을 정의해야함.
(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)); 행의 deptno가 foreign key이기 때문에 참조하는 값을 정의해야함.
ps. 제약의 이름 짓기요령 -> 테이블명_컬럼명_제약조건 ex) emp1_deptno_fk,emp1_empno_pk ...
2-1.존재하는 테이블에 제약조건을 추가하기
ALTER TABLE 테이블명
ADD 테이블 LEVEL 정의방식;
ex) ALTER TABLE DEPT1
ADD CONSTRAINT DEPT1_LOC_UK UNIQUE(LOC);
2-2.존재하는 테이블에 제약조건 삭제하기
ex) ALTER TABLE DEPT1
DROP CONSTRAINT DEPT1_LOC_UK;
2-3. NOT NULL 은 테이블 레벨 정의방식 X, 추가는 다음과 같이한다.
ex) ALTER TABLE DEPT1
MODIFY (LOC VARCHAR2(20) NOT NULL);
3. 내가 부여한 제약조건 찾아보기
DESC USER_CONSTRAINTS
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, SEARCH_CONDITION
FROM USER_CONSTRAINTS
WHERE TABLE_NAME IN ('EMP1','DEPT1'); -> 여기서 EMP1과 DEPT1은 내가제약조건을주어만든 테이블임
FROM USER_CONSTRAINTS
WHERE TABLE_NAME IN ('EMP1','DEPT1'); -> 여기서 EMP1과 DEPT1은 내가제약조건을주어만든 테이블임
'C. Oracle' 카테고리의 다른 글
oracle DDL (0) | 2017.07.02 |
---|---|
oracle 기본쿼리 사용하기 (0) | 2017.07.02 |
oracle table (0) | 2017.07.02 |
oracle SQL_PLUS 환경설정 (0) | 2017.07.02 |
토드 toad 명령어 단축키 모음 (0) | 2017.07.02 |