테이블의 특정 컬럼에 저장될 수 있는 데이터의 조건이다. 제약조건을 지정하면 조건에 부합하지 않는 데이터는 저장할 수 없다. 오라클에서 사용하는 제약조건은 다음과 같다.
NOT NUUL
CREATE TABLE 테이블명 (
컬럼명 자료형 NOT NULL);
UNIQUE
CREATE TABLE 테이블명 (
컬럼명 자료형 UNIQUE);
CREATE TABLE 테이블명 (
컬럼명 자료형 PRIMARY KEY);
FOREIGN KEY
-- 컬럼레벨 제약조건 정의, []는 생략 가능
CREATE TABLE 테이블명 (
컬럼명 자료형 [CONSTRAINT 제약조건] REFERENCES 참조테이블 (참조컬럼));
-- 테이블레벨 제약조건 정의, []는 생략 가능
CREATE TABLE 테이블명 (
[CONSTRAINT 제약조건] FOREIGN KEY (컬럼명) REFERENCES 참조테이블 (참조컬럼));
CHECK
CREATE TABLE 테이블명 (
컬럼명 자료형 CHECK (조건식));
-- 컬럼레벨 제약조건 정의, []는 생략 가능
CREATE TABLE 테이블명 (
컬럼명 자료형 [CONSTRAINT 제약조건별칭] 제약조건,
컬럼명 자료형 [CONSTRAINT 제약조건별칭] 제약조건,
. . .);
-- 테이블레벨 제약조건 정의, []는 생략 가능
CREATE TABLE 테이블명 (
컬럼명 자료형,
컬럼명 자료형,
. . .
[CONSTRAINT 제약조건별칭] 제약조건 (컬럼명1),
[CONSTRAINT 제약조건별칭] 제약조건 (컬럼명2, 컬럼명3),
. . .);
하나의 컬럼에 여러 제약조건을 지정할 경우 첫 번째 제약조건은 컬럼레벨에서 정의하고 나머지는 테이블레벨에서 정의한다.
두 개 이상의 컬럼에 같은 제약조건을 정의해야할 경우 테이블레벨로 정의한다.
일반적으로 하나의 컬럼에 NOT NULL 제약조건과 다른 제약조건을 같이 정의할 때, NOT NULL 제약조건은 컬럼레벨로 정의하고 나머지 컬럼의 제약조건은 테이블레벨로 정의한다.
제약조건은 테이블에 데이터를 저장할 때 뿐만 아니라 변경, 삭제할 때에도 제약조건을 검사한다.
예를 들어, SAMPLE_CART_ITEMS 테이블의 PRODUCT_NO는 SAMPLE_PRODCUTS의 PRODUCT_NO 컬럼의 값을 참조한다. 그러면 SAMPLE_CART_ITEMS FOREIGN KEY는 PRODUCT_NO이고, SAMPLE_PRODCUTS의 PRIMARY KEY는 PRDUCT_NO이다.
이때, SAMPLE_PRODUCTS 테이블의 PRODUCT_NO는 함부로 UPDATE나 DELETE작업을 수행할 수 없다. SAPLE_CART_ITEMS 테이블에서 이미 PRODUCT_NO를 참조하고 있기 때문이다. 만약 SAPLE_CART_ITEMS 테이블에서 참조하고 있는 PRODUCT_NO를 변경, 삭제하려고 한다면 다음과 같은 오류가 발생할 것이다.

