728x90
제약조건
(constraint)이란 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 데이터에 제한을 두는 것
제약조건 타입 | 설명 |
---|---|
💡 primary key | - 레코드를 식별하기 위한 용도 - unique & Not Null - 테이블 당 하나만 지정 - 자동으로 인덱스 생성 |
💡 unique | - 컬럼에 유일한 값을 저장하기 위한 용도 - NULL 값 지정 가능 - 테이블 당 여러개 지정 |
💡 not null | - 컬럼에 반드시 값을 저장해야 하는 용도 - 테이블 당 여러개 지정 - 컬럼 레벨로만 지정 가능 |
💡 check | - 컬럼에 임의의 조건에 일치하는 데이터만 저장하기 위한 용도 - 테이블 당 여러개 지정 |
💡 foreign key | - 하나의 테이블에서 다른 테이블을 참조하기 위해 사용되는 용도 - 테이블 당 여러개 지정 - NULL 값 지정 가능 |
primary key
-- STUDENT 테이블을 생성한 뒤, PK_SNO 제약조건 추가
CREATE TABLE STUDENT (
sno NUMBER CONSTRAINT PK_SNO PRIMARY KEY
);
-- 테이블 생성 후 ALTER 명령어로 PK_SNO 생성
ALTER TABLE STUDENT
ADD CONSTRAINT PK_SNO PRIMARY KEY (sno);
unique
-- STUDENT 테이블을 생성한 뒤, ALTER를 이용해 UK_SNO 제약조건 추가
ALTER TABLE STUDENT
ADD CONSTRAINT UK_SNO UNIQUE(sno);
-- 제약조건 삭제
ALTER TABLE STUDENT
DROP CONSTRAINT UK_SNO;
-- 복합 컬럼에 적용하는 PK_VALUE 제약조건
CONSTRAINT PK_VALUE PRIMARY KEY (필드1, 필드2);
not null
-- STUDENT 라는 테이블을 만들고, sname 컬럼의 제약조건명을 NN_SNAME 으로 하여 NOT NULL 제약조건 설정
CREATE TABLE STUDENT {
sname VARCHAR2(30) CONSTRAINT NN_SNAME NOT NULL
};
-- 제약조건을 확인할 때는 USER_CONSTRAINTS 뷰를 통해서 확인
SELECT CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'STUDENT';
check
-- STUDENT 테이블의 sno 컬럼이 1~100 까지의 값만 가질 수 있도록 체크 제약조건 생성
ALTER TABLE STUDENT
ADD CONSTRAINT CK_SNO CHECK ( sno >= 1 AND sno <= 100 );
-- 제약조건 삭제
ALTER TABLE STUDENT
DROP CONSTRAINT CK_SNO;
-- '남' , '여'의 값만 가질 수 있는 체크 제약조건 생성
ALTER TABLE STUDENT
ADD CONSTRAINT CK_SEX CHECK sex IN ('남', '여');
foreign key
-- STUDENT 테이블의 deptno 컬럼이 DEPT 테이블의 deptno 컬럼을 참조하도록 외래키 생성
ALTER TABLE STUDENT ADD CONSTRAINT FK_DEPTNO
FOREIGN KEY (deptno) REFERENCES TO DEPT(deptno);
💡 제약조건을 지정하는 방식
- 컬럼 레벨(Column Level) : 테이블을 생성할 때 각각의 컬럼을 정의하면서 같이 제약조건을 지정
- 테이블 레벨(Table Level) : 모든 컬럼을 정의하고 맨 마지막에 제약조건을 지정
NOT NULL 을 제외한 나머지 4개의 제약조건은 컬럼/테이블 레벨 방식 모두 지원한다.
-- Oracle 기준
-- 컬럼레벨
CREATE TABLE 테이블명 (
USERID VARCHAR2(10) [CONSTRAINT 제약조건명] PRIMARY KEY,
)
-- 테이블레벨
CREATE TABLE 테이블명 (
USERID VARCHAR2(10),
CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명)
)
-- ALTER 명령어
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명)
728x90
'Database > 데이터베이스' 카테고리의 다른 글
[DB] Oracle의 5가지 객체 - Table, Index, View, Sequence, Synonym (0) | 2023.07.27 |
---|---|
[DB] 관계형 데이터베이스 용어 정리📚 (0) | 2023.07.25 |
[DB] 데이터베이스 개요 (0) | 2023.07.25 |
[Database] 데이터 종속성과 정규화 (0) | 2021.12.07 |
[Database] 관계 데이터베이스 (0) | 2021.10.11 |