제약조건 이란?
테이블에 입력될 값을 제한하는 것
특징
제약조건은 컬럼별로 각각 지정할 수 있다.
테이블 생성문
CREATE TABLE 테이블명
(
컬럼 데이터타입(크기) 제약조건
);
< 1 >
UNIQUE 제약조건
( 특징 )
1) 유일한 값만 입력될 수 있다.
2) 데이터 중복 금지
3) NULL 값은 허용한다.
테이블을 만들 때 지정문
CREATE TABLE 테이블명
(
컬럼 데이터타입(크기) UNIQUE
);
< 2 >
NULL , NOT NULL
( 특징 )
NULL
기본값 / NULL 값 허용
NOT NULL
NULL 값 금지
테이블을 만들 때 지정문
CREATE TABLE 테이블명
(
컬럼 데이터타입(크기) <- NULL
컬럼 데이터타입(크기) NULL <- NULL
컬럼 데이터타입(크기) NOT NULL <- NOT NULL
);
★ 중요
< 3 >
기본키 제약조건
PRIMARY KEY (PK)
( 특징 )
UNIQUE 제약조건 + NOT NULL 제약조건 + INDEX 자동생성
1) 유일한 값만 입력됨
2) 중복금지
3) NULL 값 금지
4) INDEX 가 자동 생성된다.
거진 테이블 설계 시 1개의 테이블당 1개는 거의 존재한다고 보면 된다.
테이블 생성문
제약조건 이름 : PK_테이블명_컬럼
CREATE TABLE 테이블명
(
컬럼 데이터타입(크기)
...
, CONSTRAINT 제약조건이름 PRIMARY KEY(지정컬럼)
);
-- 또는
CREATE TABLE 테이블명
(
컬럼 데이터타입(크기) CONSTRAINT 제약조건이름 PRIMARY KEY
);
♠\ 참조 /♠
( 1 )
기본키 제약조건이름 붙이기 약속 (명명법)
CONSTRAINT 제약조건이름 제약조건
PK_테이블명_컬럼 으로 지정해 주면 좋겠죠..?
만약 이름을 부여하지 않았다면
컴퓨터가 자동으로 생성해줌 (추천 X)
< 4 >
외래키(참조키) 제약조건
FOREIGN KEY (FK)
★ 중요
무결성 제약조건
기본키 / 외래키
무결성 의미
데이터에 결점이 없는 것
주의
자식쪽 컬럼에 참조무결성 제약조건 추가시
참조하는 부모쪽 컬럼은 데이터가 유일해야함
( 예시 )
부모테이블의 부서번호가 1 ~ 4까지있는데
자식 테이블에서 부서번호 1 ~ 5를 가진 사원들의 데이터를 입력했을때
무결성이 깨져버림 (데이터에 결점이 생김)
따라서 부서번호 값만 사원테이블의 부서번호에 INSERT 가 가능하다.
테이블 생성문
제약조건이름 : FK_테이블명_컬럼명
컬럼과 참조할 컬럼 이름이 같다면 (참조할 컬럼명)은 생략이 가능
CREATE TABLE 테이블명
(
컬럼 데이터타입(크기) CONSTRAINT FK이름 REFERENCES 부모테이블 (참조할 컬럼명)
);
< 5 >
CHECK 제약조건 (CK)
( 특징 )
칼럼에서 허용 가능한 데이터의 범위나 조건을 정의할 수 있다.
테이블 생성문
제약조건이름 : CK_테이블명_칼럼명
CREATE TABLE 테이블명
(
칼럼2 데이터타입(크기) CONSTRAINT 제약조건이름 CHECK (칼럼명_조건식)
)
( 예시 )
CREATE TABLE EMP_SECOND
(
SALARY NUMBER (7,2) CONSTRAINT CK_EMP_SECOND_SALARY CHECK(SALARY > 0)
);
-- CHECK 제약조건 테스트 (에러)
INSERT INTO EMP_SECOND VALUES(-200); <-- 에러
< 6 >
DEFAULT 제약조건
특징
NULL 값이 INSERT 될때 기본적으로 다른 값으로 생성하는 제약조건
테이블 생성문
CREATE TABLE 테이블명
(
칼럼 데이터타입(크기) DEFAULT 디폴트값
)
♠\ 참조 /♠
만약 INSERT 시에
명시적으로 NULL 값을 넣으면 NULL이 들어간다
다만 이런형식 에서의 칼럼2에 디폴트값이 들어가게 됨
CREATE TABLE E
(
칼럼1 VARCHAR2(10)
칼럼2 데이터타입(크기) DEFAULT 디폴트값
);
INSERT INTO E (칼럼1) VALUES ('ㅎㅇ')
♠\ 참조 /♠
( 1 )
주의점
테이블 복사시
(INSERT INTO 테이블명 AS SELECT ~ FROM ~)
제약조건은 복사가 안된다!!
( 2 )
시스템용 테이블 또는 뷰(VIEW)
= DB 관리용 테이블
용도
현재 생성된 테이블의 정보, 제약조건 , 크기 등을 확인 할수 있다
테이블의 정보를 알려면?
USER_CONSTRAINTS
( 3 )
참조무결성(참조키) 관련 논란의 여지가 있음
(1)
DB에서 참조키를 지정해서 해결
INSERT/UPDATE 시 부모테이블에 해당 데이터가 있는지 확인
-> 있으면 INSERT/UPDATE
-> 없으면 오류 발생
단점 : 성능저하, 최악의 경우에 다른 테이블도 성능저하를 일으킴
(2)
자바코딩에서 참조키 로직을 만들어서 해결
'데이터베이스 > ORACLE_DB' 카테고리의 다른 글
Oracle_SQL - 인덱스 (INDEX) (0) | 2023.09.14 |
---|---|
Oracle_SQL - 시퀀스(Squence) (0) | 2023.09.14 |
Oracle_SQL - 테이블 데이터 추가 , 조회 , 수정 , 삭제 (DML) (0) | 2023.09.13 |
Oracle_SQL - 테이블 생성 , 수정 , 삭제 (DDL) (0) | 2023.09.13 |
Oracle_SQL - SubQuery (서브쿼리) (0) | 2023.09.12 |