[Oracle] 오라클 제약조건
제약조건
테이블 생성에 필요한 요소
1. 테이터형
- 문자 : 자바에서 String 으로 매칭한다.
- CHAR (1~2000byte) - 고정바이트이기 때문에 글자수가 동일할 때 주로 설정한다
- VARCHAR2 (1~4000byte) - 가변바이트, 일반적으로 사용하는 문자를 저장한다.
- CLOB (4G) - 가변바이트 , 줄거니라 내용설명 등 긴 내용의 데이터를 저장한다.
- 숫자
- NUMEBR(정수값) : 실제 정수
- NUMBER(정수값,정수값) : 정수 , 실수 저장
- NUMBER : 14자리까지 저장한다.
- 날짜
- DATE : 시스템의 시간
- TIMESTAMP : DATE 확장형(1/100만 초까지 저장 가능)
- 기타 : 4G까지 저장 가능
- BLOB : 동영상 , 그림 , 사진을 바이너리(2진법)으로 저장
- BFILE : 동영상 , 그림 , 사진을 파일(File)형태로 저장
2. 제약조건
- 오라클은 정형화된 데이터만 저장하기 때문에 사이트에 필요한 데이터만 저장할 수 있도록 하는 것이 제약조건이다.
NOT NULL
- 데이터에 NULL값을 허용하지 않는다.
- NULL값을 허용하지 않기 떄문에 반드시 입력값을 추가해야한다.
- 컬럼레벨 (컬럼뒤)에 작성해야 한다.
- 컬럼레벨 : 컬럼과 동시에 제약조건 생성
-- 형식(1)
컬럼명 데이터형 NOT NULL
-- 형식(2) : 권장사항 => 명칭을 통해 제약조건에 대한 수정과 삭제가 용이하다
컬럼명 데이터형 CONSTRAINT 제약조건명 NOT NULL
-- 형식 (3) : 표 제작 후에 추가하기
ALTER TABLE 테이블명 MODIFY 컬럼명 CONSTRAINT 제약조건명 NOT NULL
-- 예시
name VARCHAR2(34) NOT NULL
UNIQUE
- 유일값 , 중복이 없는 값 (NULL 허용)
- 후보키 (이메일 , 전화번호 , 주민번호)
- 컬럼을 다 생성한 후 테이블 마지막에 첨부하는 것을 권장한다.
-- 형식 (1)
컬럼명 데이터형 UNIQUE
-- 형식 (2)
컬럼명 데이터형 CONSTRAINT 제약조건명(=테이블명_컬럼명_uk) UNIQUE(컬럼명)
-- 형식 (3)
컬럼명 데이터형,
CONSTRAINT 제약조건명(=테이블명_컬럼명_uk) UNIQUE(컬럼명)
-- 형식 (4) : 테이블 제작 후 제약조건 설정
ALTER TABLE 테이블명 ADD 컬럼명 CONSTRAINT 제약조건명(=테이블명_컬럼명_uk) UNIQUE(컬럼명)
email VARCHAR2(200) UNIQUE
PRIMARY KEY
- NOT NULL + UNIQUE = NULL값 허용X + 중복 허용X
- 일반적으로 숫자에 사용 : 게시물번호 , 영화번호 => MAX+1, SEQUENCE(자동증가번호)
- 예외적으로 ID가 대표적인 PRIMARY KEY
- 권장사항 : 모든 테이블은 PRIMARY KEY를 한 개 이상 가지고 있다.
- 이상 현상 방지(무결성)
- 수정 OR 삭제 시, => 원치 않는 데이터가 적용됨
- 컬럼을 다 생성한 후 테이블 마지막에 첨부하는 것을 권장한다.
-- 형식 (1)
컬럼명 데이터형 PRIMARY KEY
-- 형식 (2)
컬럼명 데이터형 CONSTRAINT 제약조건명(=테이블명_컬럼명_pk) PRIMARY KEY(컬럼명)
-- 형식 (3) : 테이블 제작 후 제약조건 설정
ALTER TABLE 테이블명 ADD 컬럼명 CONSTRAINT 제약조건명(=테이블명_컬럼명__pk) PRIMARY KEY(컬럼명)
id VARCHAR2(20) PRIMARY KEY
FOREIGN KEY
- 외래키 , 참조키
- 참조하는 다른 테이블의 컬럼값을 벗어나면 안됨
- 게시판 , 댓글
- 정규화를 통해 테이블을 여러 개 만들 때 JOIN 기준이 되는 컬럼
- 어떤 값을 참조할지
REFERENCE
를 꼭 함께 작성해야 함 - 컬럼을 다 생성한 후 테이블 마지막에 첨부하는 것을 권장한다.
컬럼명 데이터형 CONSTRAINT 제약조건명 FOREIGN KEY(컬럼명)
REFERENCES 참조할 테이블명(칼럼명)
deptno NUBER(2) FOREIGN KEY
REFERENCES dept(deptno)
CHECK
- 지정된 데이터만 첨부
- 입력시에 라디오버튼 , 콤보박스를 사용할 때 활용한다.
- 부서명, 직위에 활용
- 컬럼을 다 생성한 후 테이블 마지막에 첨부하는 것을 권장한다.
-- 형식 (1)-1
컬럼명 데이터형 CHECK(컬럼명 IN(10,20,30))
-- 형식 (1)-2
컬럼명 데이터형 CHECK(컬럼명>0)
-- 형식 (2) : 권장사항(제약조건에 이름을 붙여야 수정,삭제에 용이함)
컬럼명 데이터형 CONSTRAINT 제약조건명 CHECK(컬럼명>0)
sex VARCHAR2(4) CHECK(sex IN('남자' ,'여자'));
DEFAULT
저장값이 없는 경우에 자동으로 설정된 값을 첨부
컬럼레벨 (컬럼뒤)에 작성해야 한다.
- 컬럼레벨 : 컬럼과 동시에 제약조건 생성
regdate DATE DEFAULT SYSDATE
제약조건 연습
1. 이름 (제약조건) 부여 : 테이블명_컬럼명_제약조건의 약자
- PK : PRIMARY KEY
- NN : NOT NULL
- CK : CHECK
- FK : FOREIGN KEY
- UK : UNIQUE
CREATE TABLE dept_test( deptno NUMBER(2), dname VARCHAR2(20), loc VARCHAR2(20), CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno), CONSTRAINT dept_dname_ck CHECK(dname IN('ACCOUNTING','RESEARCH','OPERATIONS','SALES')), CONSTRAINT dept_loc_ck CHECK(loc IN('NEW YORK','CHICAGO','BOSTON','DALLAS')) );
2. 제약조건 제작 순서 : NOT NULL => DEFAULT => PRIMARY => FOREIGN => CHECK
CREATE TABLE emp_test(
empno NUMBER(4),
ename VARCHAR2(34) CONSTRAINT emp_enmae_nn NOT NULL,
job VARCHAR2(20),
mgr NUMBER(4),
hiredate DATE DEFAULT SYSDATE,
sal NUMBER(7,2) CONSTRAINT emp_sal_nn NOT NULL,
comm NUMBER(7,2),
deptno NUMBER(2),
CONSTRAINT emp_empno_pk PRIMARY KEY(empno),
CONSTRAINT emp_mgr_fk FOREIGN KEY(mgr)
REFERENCES emp_test(empno),
CONSTRAINT emp_deptno_fk FOREIGN KEY(deptno)
REFERENCES dept_test(deptno),
CONSTRAINT emp_job_ck CHECK(job IN('CLERK','SALESMAN','PRESIDENT','MANAGER','ANALYST'))
);
3. 같은 데이터베이스(XE)에서는 테이블은 유일값이다.
4. 테이블명 제작
- 시작은 문자(영문 , 한글)로 시작한다
- 숫자를 사용이 가능하다. (앞에 사용할 수 없다)
- 테이블명은 30byte(한글 15글자)까지 사용이 가능하다.
- 영문 사용 시에 테이블명은 대문자로 저장된다.
- 특수문자는 단어가 2개 이상일 때 주로
_
로 연결됨 - 키워드는 사용할 수 없다. (SELECT , FROM…)
댓글
댓글 쓰기