제약 조건(Constraint)
제약 조건(constraint)이란 데이터의 무결성을 지키기 위해, 데이터를 입력받을 때 실행되는 검사 규칙을 의미한다.
이러한 제약 조건은 CREATE 문으로 테이블을 생성할 때나 ALTER 문으로 필드를 추가할 때도 설정할 수도 있다.
NOT NULL
•
NULL 비허용
•
중복값 허용컬럼을 필수 필드화 시킬 때 사용.NOT NULL 제약조건 설정 시 해당 컬럼에는 꼭 데이터를 입력해야 함.
•
NOT NULL 제약 조건은 CREATE 문으로 테이블을 생성할 때나, 나중에 ALTER 문으로 추가할 수도 있다.
-- emp3라는 테이블을 만들고, ename 컬럼의 제약조건명을 emp_nm_ename 으로 하여 NOT NULL 제약조건을 설정하자.
SQL> CREATE TABLE emp3(
ename VARCHAR2(30) CONSTRAINT emp_nm_enmae NOT NULL
);
-- 제약조건을 확인할 때는 USER_CONSTRAINTS 뷰를 통해서 확인할 수 있다.
SQL> SELECT CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'EMP3';
Plain Text
복사
UNIQUE
•
데이터의 유일성을 보장(=> 중복되는 데이터가 존재할 수 없음)하고, 자동으로 인덱스가 생성.
•
unique은 null허용하지만, primary key는 null허용 안함
•
unique은 하나의 테이블에 여러개 올 수 있지만, primary key는 하나만 존재
•
UNIQUE 제약 조건을 설정하면, 해당 필드는 자동으로 보조 인덱스(INDEX)로 만들어짐.
•
만일 제약 조건에 이름을 설정하면, 다음과 같이 이름을 사용하여 해당 제약 조건을 삭제할 수 있다.
-- EMP2 테이블을 생성한 뒤, ALTER 를 이용해서 제약조건을 추가해준다. (제약조건명 : EMP2_UK_DEPTNO)
ALTER TABLE EMP2
ADD CONSTRAINT EMP2_UK_DEPTNO UNIQUE(deptno);
-- 제약조건을 삭제한다.
ALTER TABLE EMP2
DROP CONSTRAINT EMP2_UK_DEPTNO;
Plain Text
복사
CHECK 조건
•
컬럼의 값을 어떤 특정 범위로 제한
-- EMP2 테이블의 comm 컬럼이 1~100 까지의 값만 가질 수 있도록 체크 제약조건 생성.
ALTER TABLE EMP2
ADD CONSTRAINT EMP2_CK_COMM CHECK (comm >= 1 AND comm <= 100);
-- 제약조건 삭제
ALTER TABLE EMP2
DROP CONSTRAINT EMP2_CK_COMM;
-- 10000, 20000, 30000, 40000, 50000 의 값만을 가질 수 있는 체크 제약조건 생성.
ALTER TABLE EMP2
ADD CONSTRAINT EMP2_CK_COMM2 CHECK comm IN (10000,20000,30000,40000,50000);
Plain Text
복사
DEFAULT (컬럼 기본값) 지정
•
데이터를 입력하지 않아도 지정된 값이 기본으로 입력된다.
•
default라고 값을 명시하면 기본값이 들어감
•
열이름이 명시되지 않으면 자동 기본값
•
값이 직접 명기되면 기본값은 무시됨.
alter table 테이블명 alter column 필드값 set default 10;
insert into 테이블명 values("홍길동","24",default,“180”);
Plain Text
복사
-- hiredate 컬럼에 값을 입력하지 않아도 오늘 날짜가 입력된다.
SQL> CREATE TABLE emp4(
... (컬럼생략) ...,
hiredate DATE DEFAULT SYSDATE );
Plain Text
복사
PRIMARY KEY 지정
•
기본키 : UNIQUE + NOT NULL 의 결합과 같음.
•
기본키는 그 데이터 행을 대표하는 컬럼으로서의 역할을 수행하여 다른 테이블에서 외래키들이 참조할 수 있는 키로서의 자격을 가지고 있다. => 참조 무결성
•
UNIQUE 제약조건과 마찬가지로 기본키를 정의하면 자동으로 인덱스를 생성, 그 이름은 기본 키 제약조건의 이름과 같다.
INDEX?
검색 키로서 검색 속도를 향상시킨다. (UNIQUE, PRIMARY KEY 생성시 자동적으로 생긴다.)
-- PRIMARY KEY 생성 예제. 제약조건명 EMP5_PK_EMPNO
CREATE TABLE EMP5(
empno NUMBER CONSTRAINT EMP5_PK_EMPNO PRIMARY KEY
);
-- 테이블 생성 후 ALTER 명령어로 PRIMARY KEY 생성 예제.
ALTER TABLE EMP5
ADD CONSTRAINT EMP5_PK_EMPNO PRIMARY KEY (empno);
Plain Text
복사
•
만약 테이블에 각 필드값에 유니크한 값이 없다면, 필드 두 개를 묶어서 primary key로 지정 가능하다.
constraint pk_value primary key (필드1,필드2)
Plain Text
복사
FOREIGN KEY (외래키) 지정
•
기본키를 참조하는 컬럼 or 컬럼들의 집합 (외래키는 기본키나 유니크가 아니면 생성 제약)
•
외래키를 가지는 컬럼의 데이터 형은 외래키가 참조하는 기본키의 컬럼과 데이터 형이 일치해야 한다.
•
(이를 어기면 참조 무결성 제약에 의해 테이블을 생성할 수 없음 !)
•
외래키에 의해 참조되고 있는 기본키 : 삭제 불가 !!
•
on update cascade하면 기본키가 수정될 경우 외래키도 같이 수정해준다는 말
•
ON DELETE CASCADE 연산자와 함께 정의된 외래키의 데이터는 그 기본키가 삭제될 때 같이 삭제
- emp2 테이블의 deptno 컬럼이 dept 테이블의 deptno 컬럼을 참조하도록 외래키를 생성하자.
ALTER TABLE EMP2 ADD CONSTRAINT emp2_fk_deptno
FOREIGN KEY (deptno) REFERENCES TO DEPT(deptno);
/*
FOREIGN KEY 뒤의 (deptno)는 emp2 테이블의 deptno 컬럼
REFERENCES TO 뒤에는 참조할 테이블 명 (참조할 컬럼) 순서로 써준다.
*/
Java
복사