제약 조건(Constraint)
Oracle에서는 제약 조건을 사용하여 유효하지 않은 Data가 입력되는 것을 방지한다.
제약 조건은 Table 생성 시 또는 생성 후에 정의한다.
Column 또는 Table 레벨 별로 제약 조건을 적용하고, 종속된 Table의 삭제를 방지한다.
제약 조건 이름을 지정할 수 있는데, 지정하지 않은 경우 SYS_Cn 형식의 이름을 생성한다.
USER_CONSTRAINTS View에서 부여된 제약 조건을 확인할 수 있다.
USER_CONS_COLUMNS View에서 제약 조건과 연관된 Column을 확인할 수 있다.
유형
NOT NULL : 칼럼에 Null 값을 포함하지 않도록 지정한다.
UNIQUE : Table의 모든 행에 대해 고유한 값을 갖는 칼럼 또는 칼럼의 조합을 지정한다.
PRIMARY KEY : Table의 각 행을 고유하게 식별한다.
FOREIGN KEY : 칼럼과 참조된 Table의 칼럼 간에 외래 키 관계를 설정하고 시행한다.
CHECK : 참이어야 하는 조건을 지정한다.
/* 제약 조건 정의 */
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][, ...]);
/* Column 제약 조건 레벨 */
column [CONSTRAINT constraint_name] constraint_type,
/* Table 제약 조건 레벨 */
column, ...
[CONSTRAINT constraint_name] constraint_type
(column, ...), ...
Column 제약 조건 레벨은 Column 별로 정의하며, 무결성 제약 조건의 모든 유형을 정의할 수 있다.
Table 제약 조건 레벨은 칼럼 정의와는 별도이지만 하나 이상의 칼럼을 참조하여 정의하며, NOT NULL을 제외한 모든 유형을 정의할 수 있다.
NOT NULL
해당 칼럼에 Null 값을 허용하지 않는다는 의미이다.
NOT NULL 제약 조건이 없는 칼럼은 기본적으로 NULL을 포함할 수 있다.
Column 레벨에서만 정의할 수 있다.
UNIQUE KEY
Column 또는 Column 집합의 모든 값이 Table에서 고유하도록 하여 중복되는 값이 없게 한다.
UNIQUE KEY 제약 조건 정의에 포함된 칼럼을 Unique Key라고 하고, Unique Key가 하나 이상의 칼럼을 포함하면 해당 그룹을 Composite Unique Key라고 한다.
NOT NULL 제약 조건이 정의되지 않은 칼럼도 Unique Key Column이 될 수 있고, Null 값은 항상 UNIQUE KEY 제약 조건을 만족한다.
PRIMARY KEY
Table 당 한 개만 생성할 수 있다.
Table의 각 행을 고유하게 식별하는 칼럼 또는 칼럼의 집합으로, Primary Key에 해당하는 칼럼은 Null 값을 포함할 수 없다.
FOREIGN KEY (참조 무결성)
칼럼 또는 칼럼 집합을 Foreign Key로 지정하여 다른 Table의 Primary Key 또는 Unique Key와의 관계를 설정한다.
Foreign Key 값은 상위 Table에 있는 값과 일치하거나 Null이어야 하고, Data 값을 기준으로 하며 논리적인 포인터이다.
실무에서는 거의 사용되지 않는다.
FOREIGN KEY 제약 조건을 명시할 때 조건 키워드 세 가지가 존재한다.
FOREIGN KEY는 제약 조건에 사용될 자식 하위 Table의 Column을 정의한다.
REFERENCES는 상위 Table의 Table 및 Column을 정의한다.
ON DELETE CASCADE는 상위 Table에서 행을 삭제할 때, 해당 행에 종속된 하위 Table의 행 삭제를 허용한다는 뜻이다. ON DELETE CASCADE 키워드를 명시했다면 상위 Table 행 삭제 시 동일한 Key를 가진 하위 Table 행도 자동으로 삭제된다.
CHECK
각 행이 만족해야 하는 조건을 정의한다.
Column에 정의할 수 있는 CHECK 제약 조건 수는 제한이 없고, 단일 Column은 복수의 CHECK 제약 조건에 사용될 수 있다.
제약 조건 추가 및 삭제
제약 조건을 추가 또는 삭제할 수 있다. (수정 불가)
NOT NULL 제약 조건과 같은 경우는 MODIFY 절을 사용하여 추가하거나 삭제할 수 있다.
ALTER TABLE table
ADD [CONSTRAINT contraint] type (column)
ALTER TABLE table
DROP PRIMARY KEY | UNIQUE (column) | CONSTRAINT constraint [CASCADE]
위 형식에서 CASCADE를 명시해준다면 종속된 제약 조건도 함께 삭제할 수 있다.
CASCADE CONSTRAINTS 절은 DROP COLUMN과 함께 사용된다.
해당 절 사용 시 칼럼에 정의된 Primary key 및 Unique Key에 관한 모든 참조 무결성 제약 조건을 삭제하고, CHECK 제약 조건도 삭제된다.
ALTER TABLE table
ENABLE CONSTRAINT constraint
ALTER TABLE table
DISABLE CONSTRAINT constraint [CASCADE]
ALTER 문에서 ENABLE 또는 DISABLE 절을 사용하여 제약 조건을 활성화하거나 비활성화할 수 있다.
UNIQUE KEY 또는 PRIMARY KEY 제약 조건 활성화 시 UNIQUE INDEX가 자동으로 생성된다.