제약조건 (CONSTRAINT)
컬럼에 대한 속성 정의
데이터 무결성을 보장하기 위한 용도로 사용
부적절한 데이터가 들어오는 것을 사전에 차단하도록 규칙을 정하는 것
제약조건은 컬럼의 소성처럼 사용하지만, 엄연히 데이터베이스의 객체이므로 고유 이름(제약조건명)을 지정해야 함
지정하지 않는 경우 자동으로 부여됨
제약조건 종류
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
제약조건 확인
USER_CONSTRAINTS 데이터 사전 활용
컬럼명 | 설명 |
OWNER | 제약조건 소유 계정 |
CONSTRAINT_NAME | 제약조건 이름(직접 지정하지 않을 경우 오라클이 자동으로 지정) |
CONSTRAINT_TYPE | 제약조건 종류 C: CHECK, NOT NULL U: UNIQUE P: PRIMARY KEY R: FOREIGN KEY |
TABLE_NAME | 제약조건을 지정한 테이블명 |
-- 제약조건 정보 확인
SELECT * FROM USER_CONSTRAINTS;
-- 테이블 정보 확인
SELECT * FROM USER_TABLES;
NOT NULL
지정한 컬럼에 NULL의 저장을 허용하지 않는 제약조건
NULL을 제외한 데이터의 중복 허용
컬럼에만 적용 가능(테이블 불가)
반드시 컬럼에 값이 존재해야만 하는 경우에 지정
CREATE TABLE 새로운_테이블명(
컬럼명 데이터타입,
컬럼명 데이터타입 NOT NULL,
컬럼명 데이터타입 NOT NULL,
...
);
-- 제약조건명 직접 지정
CREATE TABLE 새로운_테이블명(
컬럼명 데이터타입,
컬럼명1 데이터타입
CONSTRAINT 제약조건명1 NOT NULL,
컬럼명2 데이터타입
CONSTRAINT 제약조건명2 NOT NULL,
...
);
UNIQUE
지정한 컬럼에 저장할 데이터의 중복을 허용하지 않는 제약조건
NULL은 값이 존재하지 않음을 의미하기 때문에 중복 대상에서 제외됨(여러 개 존재 가능)
CREATE TABLE 새로운_테이블명(
컬럼명 데이터타입,
컬럼명 데이터타입 UNIQUE,
컬럼명 데이터타입 UNIQUE,
...
);
-- 제약조건명 직접 지정
CREATE TABLE 새로운_테이블명(
컬럼명 데이터타입,
컬럼명1 데이터타입
CONSTRAINT 제약조건명1 UNIQUE,
컬럼명2 데이터타입
CONSTRAINT 제약조건명2 UNIQUE,
...
);
PRIMARY KEY
UNIQUE와 NOT NULL 제약조건의 특성을 모두 가지는 제약조건
데이터 중복을 허용하지 않고 NULL도 허용하지 않음
테이블 당 하나만 지정 가능하지만 여러 컬럼을 묶어 하나로 만드는 것 가능
특정 컬럼을 PRIMARY KEY로 지정하면 해당 컬럼에는 자동으로 인덱스 생성
CREATE TABLE 새로운_테이블명(
컬럼명 데이터타입,
컬럼명 데이터타입 PRIMARY KEY,
컬럼명 데이터타입,
...
);
-- 제약조건명 직접 지정
CREATE TABLE 새로운_테이블명(
컬럼명1 데이터타입,
컬럼명 데이터타입,
컬럼명 데이터타입,
... ,
CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명1)
);
CREATE TABLE 새로운_테이블명(
컬럼명1 데이터타입,
컬럼명2 데이터타입,
컬럼명 데이터타입,
... ,
CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명1, 컬럼명2)
);
FOREIGH KEY
서로 다른 테이블 간 관계를 정의하는 데 사용하는 제약조건
특정 테이블에서 PRIMARY KEY 제약 조건을 지정한 컬럼을 다른 테이블의 특정 컬럼에서 참조한다는 의미
다른 테이블의 컬럼을 참조하여 존재하는 데이터만 입력 가능
CREATE TABLE 새로운_테이블명(
컬럼명 데이터타입 REFERENCES 참조할_테이블명(참조할_컬럼명),
컬럼명 데이터타입 REFERENCES 참조할_테이블명(참조할_컬럼명),
컬럼명 데이터타입
...
);
-- 제약조건명 직접 지정
CREATE TABLE 새로운_테이블명(
컬럼명1 데이터타입
CONSTRAINT 제약조건명1 REFERENCES 참조할_테이블명1(참조할_컬럼명1),
컬럼명2 데이터타입
CONSTRAINT 제약조건명2 REFERENCES 참조할_테이블명2(참조할_컬럼명2),
컬럼명 데이터타입,
...
);
CREATE TABLE 새로운_테이블명(
컬럼명1 데이터타입,
컬럼명2 데이터타입,
컬럼명 데이터타입,
... ,
CONSTRAINT 제약조건명1 FOREIGN KEY(컬럼명1) REFERENCES 참조할_테이블명1(참조할_컬럼명1),
CONSTRAINT 제약조건명2 FOREIGN KEY(컬럼명2) REFERENCES 참조할_테이블명2(참조할_컬럼명2)
);
* 참조되는 컬럼은 반드시 PRIMARY KEY이어야 함
ON DELETE CASCADE
참조할 테이블에서 특정 데이터를 삭제했을 때, 참조된 테이블에서 특정 데이터를 포함한 데이터도 함께 삭제하고 싶은 경우
FOREIGN KEY(컬럼명) REFERENCES 참조할_테이블명(참조할_컬럼명) ON DELETE CASCADE
ON DELETE SET NULL
참조할 테이블에서 특정 데이터를 삭제했을 때, 참조된 테이블에서 특정 데이터를 포함한 데이터의 값을 NULL로 변경하고 싶은 경우
FOREIGN KEY(컬럼명) REFERENCES 참조할_테이블명(참조할_컬럼명) ON DELETE SET NULL
CHECK
컬럼에 저장할 수 있는 데이터의 범위 또는 패턴을 정의할 때 사용
설정한 조건식을 만족하는 데이터만 입력 가능
-- 제약조건명 직접 지정
CREATE TABLE 새로운_테이블명(
컬럼명1 데이터타입
CONSTRAINT 제약조건명1 CHECK (조건1),
컬럼명2 데이터타입
CONSTRAINT 제약조건명2 CHECK (조건2),
컬럼명 데이터타입,
... ,
);
제약조건 변경
-- 제약조건 수정|추가
ALTER TABLE 테이블명
[MODIFY|ADD] (컬럼명 데이터타입 제약조건);
-- 제약조건 이름 변경
ALTER TABLE 테이블명
RENAME CONSTRAINT 제약조건명 TO 변경할_제약조건명;
-- 제약조건 삭제
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명;
ALTER TABLE 테이블명
DROP PRIMARY KEY;
DEFAULT
제약조건과는 별개로 특정 컬럼에 저장할 값이 지정되지 않았을 경우, 기본값(default) 지정 가능
CREATE TABLE 새로운_테이블명(
컬럼명 데이터타입,
컬럼명 데이터타입 DEFAULT 기본값,
...
);
제약조건 활성화 | 비활성화
-- 제약조건 활성화
ALTER TABLE 테이블명
ENABLE CONSTRAINT 제약조건명;
-- 제약조건 비활성화
ALTER TABLE 테이블명
DISABLE CONSTRAINT 제약조건명;
'ORACLE SQL' 카테고리의 다른 글
PL/SQL & 변수 (0) | 2021.03.04 |
---|---|
객체 (0) | 2021.03.03 |
ORACLE 사용자 관리 (0) | 2021.03.02 |
트랜잭션 (0) | 2021.03.02 |
SUBQUERY (0) | 2021.03.01 |