제약 조건은 컬럼에 어떤 조건을 거는 것.
해당 컬럼에 조건을 걸면 해당 컬럼 또는 테이블 이용시 제약 조건을 지켜야 함.
PRIMARY KEY (기본키/PK)
테이블 당 하나만 가질 수 있는 키로서 해당 키를 가진 컬럼의 데이터를 중복이 불가하고 NULL이 데이터로 올 수 없다.
주민등록번호, ID 같이 다른 중복이 없어야 하는 데이터를 사용할 때 좋다.
#1
CREATE TABLE 테이블명(
컬럼명 데이터형식 PRIMARY KEY
);
CREATE TABLE TEST_TABLE1(
ID VARCHAR2(20) PRIMARY KEY,
NAME VARCHAR2(20)
);
#2
CREATE TABLE 테이블명(
컬럼명 데이터형식,
CONSTRAINT 프라이머리키 이름 PRIMARY KEY(컬럼명)
);
CREATE TABLE TEST_TABLE2(
ID VARCHAR2(20),
NAME VARCHAR(20),
CONSTRAINT PK PRIMARY KEY(ID)
);
FOREIGN KEY(외래키/FK)
외부의 테이블을 참조 시키고 싶을 때 해당 키를 컬럼에 지정해서 외부 테이블의 컬럼과 연동 가능하다.
ID 값을 공유해야 하는 A테이블(부모)와 B테이블(자식)이 있다고 했을 때
A테이블과 B테이블은 같은 ID 값을 공유해야 하는데 이 때 B테이블의 ID 컬럼에 외래 키를 지정하고
참조 테이블로 A테이블의 ID 컬럼을 참조하면 둘의 부모/자식 관계가 생긴다.
외래키 생성 시 주의 할 점
ㅇ부모 테이블(참조 테이블)의 컬럼은 PRIMARY KEY 또는 UNIQUE로 지정되어야 한다.
ㅇ부모 테이블에 없는 값은 자식 테이블에 추가할 수없다. 즉 부모 테이블에 있는 값만 자식 테이블이 가질 수 있다.
FOREIGN KEY로 묶인 부모 테이블의 컬럼 또는 값은 마음대로 삭제할 수 없다.
자식 테이블에서 컬럼과 값을 참조하고 있기 때문이다.
삭제하려면 자식의 컬럼, 값을 먼저 삭제하고 그 다음 부모 컬럼, 값을 삭제해야 한다.
또는 ON DELETE CASCASE, ON DELETE SET NULL이라는 조건을 추가한다.
ON DELETE CASCADE | 부모 테이블의 값을 삭제하면 자식 테이블의 값도 연동하여 삭제한다. |
ON DELETE SET NULL | 부모 테이블의 값을 삭제하면 자식 테이블의 값이 NULL로 바뀐다. |
CREATE TABLE 테이블명(
컬럼명 데이터형식,
CONSTRAINT 외래키명 FOREIGN KEY(적용 컬럼명)
REFERENCE 참조테이블명(참조테이블 내 참조할 컬럼명)
ON DELETE CASECADE(선택사항)
);
CREATE TABLE TEST_TABLE1(
ID VARCHAR2(20),
NAME VARCHAR2(20),
CONSTRAINT PK PRIMARY KEY(ID)
);
CREATE TABLE TEST_TABLE2(
ID VARCHAR2(20),
NAME VARCHAR2(20),
CONSTRAINT FK FOREIGN KEY(ID),
REFERENCE TEST_TABLE1(ID),
ON DELETE CASCADE
);
UNIQUE (고유키)
PRIMARY KEY와 비슷하다.
해당 키를 가진 컬럼은 중복된 데이터를 값으로 가질 수 없다.
다만 PRIMARY KEY와 차이점이라면 다음과 같다.
ㅇPRIMARY KEY와 달리 NULL 값도 허용한다.
ㅇ하나의 테이블에 다수의 UNIQUE KEY도 허용한다. (PRIMARY KEY는 하나만 허용)
위 이유로 PRIMARY KEY는 데이터 무결성을 위해 쓰인다.
#1
CREATE TABLE 테이블명(
컬럼명 데이터형식 UNIQUE
);
CREATE TABLE TEST_TABLE1(
ID VARCHAR2(20) UNIQUE,
NAME VARCHAR2(20)
);
#2
CREATE TABLE 테이블명(
컬럼명 데이터형식
CONSTRAINT 유니크키명 UNIQUE(컬럼명)
);
CREATE TABLE TEST_TABLE2(
ID VARCHAR2(20),
NAME VARCHAR2(20),
CONSTRAINT UK UNIQUE(ID)
);
CHECK
입력되는 값이 CHECK을 통해 미리 지정한 조건에 맞지 않으면 오류를 반환한다.
특정 값이나 범위를 지정해주면 해당 안에 입력 값이 맞는지 확인한다.
#1
CREATE TABLE 테이블명(
컬럼명 데이터형식 CHECK(컬럼명>조건값)
);
CREATE TABLE TEST_TABLE1(
NUM NUMBER CHECK(NUM > 10)
);
#2
CREATE TABLE 테이블명(
컬럼명 데이터형식
CONSTRAINT 체크키명 CHECK(컬럼명 > 조건값)
);
CREATE TABLE TEST_TABLE2(
NUM NUMBER
CONSTRAINT CK CHECK(NUM>10)
);
NOT NULL
NOT NULL은 해당 컬럼에 NULL 값과 공백 문자열을 허용하지 않는다.
CREATE TABLE 테이블명(
컬럼명 데이터형식 NOT NULL
);
CREATE TABLE TEST_TABLE1(
ID VARCHAR2(20) NOT NULL
);
DEFAULT (기본값)
Default가 설정되어 있는 컬럼에는 따로 데이터를 입력하지 않아도 Default 값으로 설정된 값이 저장된다.
테이블 생성할 때 Default (기본 값) 함께 생성
CREATE TABLE boardA(
bidx number not null,
title varchar2(10) not null,
content varchar2(100) not null,
delYN varchar2(1) default 'N' not null -- 기본 값을 N으로 설정
);
테이블 생성 후에 Default 값 추가하기
create table boardA(
bidx number not null,
title varchar2(10) not null,
content varchar2(100) not null,
delYN varchar2(1) not null
);
-- 기존의 컬럼에 Default 값 추가하기
alter table boardA modify (delYN default 'N');
적용한 Default 값 삭제하기
alter Table boardA modify (delyn default null);
create table boardA(
bidx number not null primary key,
title varchar2(10) not null,
content varchar2(100) not null,
delYN varchar2(1) default 'N' not null
);
insert into boardA(bidx, title, content)
values (1, '제목', '내용');
select * from boardA;
boardA에는 4개의 컬럼이 있지만 3개의 컬럼에만 데이터를 insert 했고,
테이블 출력 시, delYN에는 데이터를 삽입하지 않았지만 기본 값으로 들어있는 것을 확인할 수 있다.
참고
'DB > Oracle' 카테고리의 다른 글
뷰 VIEW (0) | 2022.07.01 |
---|---|
오라클 DB 연동 후 데이터 출력 (0) | 2022.07.01 |
수업 36일차 - 스칼라 서브쿼리, 인라인뷰, 데이터정의언어(DDL) (0) | 2022.06.27 |
수업 35일차 - 일반 함수, group by/having, join (0) | 2022.06.22 |
수업 34일차 - 문자 함수, 숫자 함수, 날짜 함수 (0) | 2022.06.21 |