제약 조건

NOT NULL 제약
설명

NOT NULL 제약 조건은 정의된 컬럼이 반드시 NULL을 제외한 어떤 값을 갖도록 하는 제약 조건이다. 모든 컬럼은 데이터에 대해 NOT NULL 제약 조건을 가질 수 있다. 만약 INSERT, UPDATE 구문을 통해 값을 NULL 값으로 입력하거나 변경할 경우 에러가 발생한다.

예제

다음은 manager2 테이블의 name 컬럼을 NOT NULL로 지정하는 예제이다.

CREATE TABLE manager2
(name VARCHAR(40) NOT NULL,
event VARCHAR(50));

UNIQUE 제약
설명

UNIQUE 제약 조건은 정의된 컬럼이 고유한 값을 갖도록 하는 제약 조건이다. UNIQUE 제약 조건은 단일 컬럼뿐만 아니라 하나 이상의 다중 컬럼에 대해서도 정의가 가능하다.

예제

UNIQUE 제약 조건이 다중 컬럼에 대해 정의되면 컬럼 전체 값의 조합에 대해 고유성이 보장된다. 아래의 예와 같이 두 번째 입력 구문은 a 컬럼의 값은 같지만 b 컬럼의 값이 고유하므로 성공한다. 세 번째 입력 구문은 a, b 전체에 대해 첫 번째 값과 동일하므로 오류가 발생한다.

CREATE TABLE "test"(
a INTEGER,
b INTEGER,
UNIQUE(a,b))
INSERT INTO "test" VALUES(1, 2);
INSERT INTO "test" VALUES(1, 3);
-- b 값이 다르므로 성공
INSERT INTO "test" VALUES(1, 2);
-- a, b 값이 첫 번째 입력 값과 동일하므로 오류

PRIMARY KEY 제약
설명

테이블에서 키(key)란 각 인스턴스를 고유하게 식별할 수 있는 하나 이상의 컬럼들의 집합을 말한다. 후보키(candidate key)는 테이블 내의 각 인스턴스를 고유하게 식별하는 컬럼들의 집합을 의미하며, 사용자는 이러한 후보 키 중 하나를 기본키(primary key)로 정의할 수 있다. 즉, 기본키로 정의된 컬럼 값은 각 인스턴스에서 고유하게 식별된다.

예제

CREATE TABLE nation (
   code             CHAR(3)     NOT NULL PRIMARY KEY,
   name             VARCHAR(40) NOT NULL,
   continent        VARCHAR(10) ,
   capital          VARCHAR(30)
);

CREATE TABLE record (
host_year    INT NOT NULL,
event_code   INT NOT NULL,
athlete_code INT NOT NULL,
medal        CHAR(1)  NOT NULL,
score        VARCHAR(20),
unit         VARCHAR(5),
PRIMARY KEY(host_year, event_code, athlete_code, medal)
);

FOREIGN KEY 제약
설명

외래키(foreign key)란 참조 관계에 있는 다른 테이블의 기본키를 참조하는 컬럼 또는 컬럼들의 집합을 말한다. 외래키와 참조되는 기본키는 동일한 데이터 타입을 가져야 한다. 외래키가 기본키를 참조함에 따라 연관되는 두 테이블 사이에는 일관성이 유지되는데, 이를 참조 무결성 (referential integrity)이라 한다.

구문

CREATETABLE | CLASS } table_name
[ {UNDER | AS SUBCLASS OF } super_class_name [ {, super_class_name }_ ] ] ...
[( column_definition [ { , column_definition }...; ]
| unique_constraint
| referential_constraint
)]

referential_constraint:
[FOREIGN KEY [constraint-name] (attribute_name[{, attribute_name }...; ])
REFERENCES referenced_class_name (attribute_name [{ , attribute_name }...; ])
[referential_triggered_action] ]

referential_triggered_action:
update_rule [ delete_rule [ cache_object_rule ] ]

update_rule:
ON UPDATE referential_action

delete_rule:
ON DELETE referential_action

cache_object_rule:
ON CACHE OBJECT cache_object_column_name

referential_action:
CASCADE
| RESTRICT
| NO ACTION

예제

다음은 데모로 제공된 올림픽 데이터베이스에서 외래키 참조 관계를 보여주는 예제이다.

테이블 생성시 nation 테이블과 olympic 테이블의 기본키를 participant 테이블에서 외래키로 참조하도록 지정한다.

CREATE TABLE nation (
   code             CHAR(3)     NOT NULL PRIMARY KEY,
  ....
);

CREATE TABLE olympic (
   host_year        INT    NOT NULL PRIMARY KEY,
   ....
);

CREATE TABLE participant (
   host_year        INT    NOT NULL ,
   nation_code      CHAR(3)     NOT NULL ,
   ....
   PRIMARY KEY(host_year, nation_code)   ,
   FOREIGN KEY(host_year) REFERENCES olympic(host_year),
   FOREIGN KEY(nation_code) REFERENCES nation(code)
);

주의 사항