테이블 안에서 데이터의 성격을 정의하는 것이 바로 제약조건(Constaint) 이며 테이블 생성 또는 변경시에 특정 컬럼에 조건을 정의할 수 있다. 제약 조건에는 NOT NULL조건, 유일성(UNIQUE), Chek 조건, 기본키, 외래키 조건 이 있다.

- 데이터베이스 성능을 향상시킬 수 있다.
- 선언과 변경이 용이하다.
- 활성화/비활성화 할 수 있다.
- 요구사항과 Rule의 통합적 통제가 가능하다.



NOT NULL

Create Table Employee(
emp_no NUMBER CONSTRAINT Emp_nn_EmpNo NOT NULL,
emp_name VARCHAR2(30),
dept_no NUMBER CONSTRAINT Emp_nn_DeptNo NOT NULL
);
사원번호에 널값이 들어가는걸 허용하지 않겠다는 말이다. 널값이 들어가면 Emp_nn_EmpNo 라는 에러메세지가 뜬다.



UNIQUE

Create Table Employee(
emp_no NUMBER CONSTRAINT Emp_nn_EmpNo NOT NULL,
                          CONSTRAINT Emp_nn_EmpNo UNIQUE
)
유일성을 보장한다는 뜻으로 emp_no 에 10이라는 값이들어가면 또 다시 10이라는 값이 들어갈 수 없다.



CHECK

CREATE TABLE Class(
class_id NUMBER CONSTAINT Class_ck_ClassID
                          CHECK (class_id >= 1 AND class_id <= 10),
class_name VARCHAR2(20) );
class_id가 만약 1이상 10 이하가 아닌 숫자가 들어가면 에러가 발생한다.



DEFAULT

max_amount       NUMBER DEFAULT 2000
                         CONSTRAINT CreditCard_nn_MaxAmnt NOT NULL
만약 max_amount 컬럼 값을 인서트 할때 넣지 않더라도 에러가 나지않는다 기본값을 설정했기때문이다.



기본키 - (NOT NULL + UNIQUE)

CREATE TABLE Loans(
account NUMBER(6, 0),
loan_number NUMBER(6, 0),
cust_id NUMBER(6,0),
CONSTRAINT Loans_pk_al PRIMARY KEY( account, loan_number)
);
이렇게 동시에 2개의 기본키를 지정해 줄 수도 있다.



외래키  - 다른 테이블에 기본키를 참조하는 컬럼

외래키로 선언될 컬럼의 데이터형은 그 키가 참조하는 기본키의 데이터 형과 일치해야 한다.


CREATE TABLE Dept(
dept_no   NUMBER,
dept_name VARCHAR2(10),

외래키 설정 2가지 방법
emp_no      VARCHAR2(6) CONSTRAINT Dept_fk_EmpNo References Employee(emp_no),
(CONSTRAINT Cloth_fk_shop_no FOREIGN KEY (shop_no) REFERENCES Shop)

CONSTRAINT Dept_pk_DeptNo PRIMARY KEY (dept_no)
);




다른 테이블에서 기본키를 참조하고있다.
ALTER TABLE Dept DROP PRIMARY KEY; - 에러가 난다.



외래키에 의해 참조되고 있는 기본키는 삭제될 수 없다.

부득이하게 기본키를 삭제해야 한다면 그 키를 참조하는 외래키를 먼저 삭제한 뒤에 기본키를 삭제한다.

ALTER TABLE Employee DROP CONSTRAINT Employee_FK_Dept_NO;  - 외래키 삭제
ALTER TABLE Dept DROP PRIMARY KEY; -기본키 삭제


'프로그래밍 기초 > 오라클' 카테고리의 다른 글

서브쿼리  (0) 2010.03.02
Advanced Query  (0) 2010.02.25
Single-Row Functions  (0) 2010.02.24
기본쿼리2  (0) 2010.02.24
기본쿼리  (1) 2010.02.23
Posted by 아몰라