//제약 조건(제약 사항), Constraint
- 해당 컬럼에 들어갈 데이터(값)에 대한 조건
- 조건을 만족하면 > 대입
- 조건을 불만족하면 > 에러 발생
- 유효성 검사 도구
- 데이터베이스 > 데이터 관리 > 무결성을 보장하는 도구
1. NOT NULL
~ 컬럼명 자료형(길이) not null
- 해당 컬럼이 반드시 값을 가져야 한다.
- 해당 컬럼에 값이 없으면 에러 발생
- SQL은 빈문자('')도 null로 취급한다.
2. PRIMARY KEY, PK
~ 컬럼명 자료형(길이) primary key
- 기본키
- 테이블에서 행과 행을 구분하기 위한 수단 > 제약
- 행을 식별하는 대표 컬럼을 지정하는 역할
- 모든 테이블은 반드시 1개의 기본키가 존재해야 한다.★★★★★★
- 중복값을 가질 수 없다. > Unique
- 값을 반드시 가진다. > Not Null
3. FOREIGN KEY
~ 컬럼명 자료형(길이) [constraint 제약사항명] references 참조할테이블명(참조할컬럼명)
- 외래키, 참조키
- 다른 테이블의 컬럼을 참조한다.
- 항상 부모 테이블(기본 테이블)을 먼저 만든 후 자식 테이블(참조 테이블)을 생성해야 한다.
~ 보통 두 테이블의 데이터 비교 > 먼저 존재해야 할 성격의 데이터(시간상..) > 부모 테이블
4. UNIQUE
~ 컬럼명 자료형(길이) unique
- 유일하다. > 행들 간에 동일한 값을 가질 수 없다.
- Null을 가질 수 있다.
- 컬럼명 자료형(길이) unique not null > 가능 > Primary key와 같은 권한
5. CHECK
~ 컬럼명 자료형(길이) check(조건)
- 사용자 정의 제약 조건
- where절과 동일한 조건을 컬럼에 적용한다.
6. DEFAULT
~ 컬럼명 자료형(길이) defalut '기본값'
- 기본값 설정
- insert,update 작업 때 값을 대입하지 않으면, 미리 준비해 놓은 기본값을 대신 넣는 역할
- insert into (컬럼리스트)에서 컬럼을 생략하거나 values(값 목록)에 default 상수를 적어서 사용할 수 있다.
// 제약 조건 단위
1. 도메인
2. 엔티티
3. 릴레이션
// 도메인 : 유효한 값의 범위
- 속성에 도메인이 아닌 값이 올 수 없도록 하는 제약 조건
1. NOT NULL
- 반드시 값을 입력해야 하는 경우
--테이블 생성할 때 적용
CREATE TABLE TEST
(
ID VARCHAR2(50) NOT NULL,
EMAIL VARCHAR2(200) NULL,
PHONE CHAR(13) NOT NULL
)
-- 테이블을 생성한 후 적용
ALTER TABLE TEST MODIFY EMAIL VARCHAR2(200) NOT NULL;
- 요즘은 일일이 명령어를 입력하지는 않음..
2. DEFAULT
- 반드시 입력해야 하는 값이지만 사용자가 입력하는 것이 아닌 경우
--테이블 생성할 때 적용
CREATE TABLE TEST
(
PWD VARCHAR2(200) DEFAULT '111'
)
-- 테이블을 생성한 후 적용
ALTER TABLE TEST MODIFY EMAIL VARCHAR2(200) DEFAULT '111'
3. CHECK★
- 값의 유효 범위나 형식 등을 체크해야 하는 경우
--테이블 생성할 때 적용
CREATE TABLE TEST
(
PHONE VARCHAR(2) CHECK(PHONE LIKE '010-%-____') NOT NULL
)
-- 테이블을 생성한 후 적용
ALTER TABLE TEST ADD CONSTRAINT CK_TEST_PHONE CHECK(PHONE LIKE '010-%-____')
INSERT INTO MEMBER(ID, PWD, NAME, GENDER, PHONE)
VALUES('sorrel2', '123', '수지' , '여', '01012345678');
※ 정규식을 이용한 체크 제약 조건
REGEXP_LIKE(PHONE, '01\d-\d{3,4}=\d{4}')
ALTER TABLE MEMBER
ADD CONSTRAINT MEMBER_PHONE_CHK1 CHECK(REGEXP_LIKE(PHONE,'01\d-\d{3,4}-\d{4}'));
// 엔티티
- 중복된 레코드가 없도록 제한한다.
- PRIMARY KEY
- UNIQUE
--테이블 생성할 때 적용
CREATE TABLE NOTICE
(
ID NUMBER,
TITLE VARCHAR2(300) NOT NULL,
WRITER_ID VARCHAR2(50) NOT NULL,
CONSTRAINT NOTICE_ID_PK PRIMARY KEY(ID),
CONSTRAINT NOTICE_ID_UK UNIQUE(WRITER_ID)
)
-- 테이블을 생성한 후 적용
ALTER TABLE NOTICE
ADD CONSTRAINT NOTICE_ID_PK PRIMARY KEY(ID)
ALTER TABLE NOTICE
ADD CONSTRAINT NOTICE_WRITER_UK UNIQUE(WRITER_ID)
// 제약사항을 만드는 방법
a. 컬럼 수준에서 만드는 방법
- 컬럼명 자료형(길이) [constraint 제약사항명] not null
- 제약사항명: 테이블명_컬럼명_제약종류
~ seq number(3) constraint tblmemo_seq_pk primary key
create table tblMemo (
seq number(3) constraint tblmemo_seq_pk primary key,
name varchar2(30) constraint tblmemo_name_df default '익명',
memo varchar2 constraint constraint tblmemo_memo_ck check(length(memo) >= 10),
regdate date tblmemo_regdate_uk unique
);
b. 테이블 수준에서 만드는 방법
create table tblMemo (
seq number(3),
name varchar2(30),
memo varchar2(1000),
regdate date,
constraint tblmemo_seq_pk primary key(seq),
constraint tblmemo_name_uq unique(name),
constraint tblmemo_memo_ck check(length(memo) >= 10),
constraint tblmemo_memo_df default sysdate
);
c. 외부에서 만드는 방법
create table tblMemo(
seq number(3),
name varchar2(50),
memo varchar2(1000),
regdate date
);
alter table tblMemo
add constraint tblmemo_deq_pk primary key(seq);
alter table tblMemo
add constraint tblmemo_name_uq unique(name);
alter table tblMemo
add constraint tblmemo_memo_ck check(length(memo) >= 10);
'데이터베이스(DB) > Oracle' 카테고리의 다른 글
[Oracle]식별자 (0) | 2023.03.20 |
---|---|
[Oracle] 시퀀스(Sequence) (0) | 2023.02.22 |
[Oracle] 뷰(VIEW) (0) | 2023.02.21 |
[Oracle] 유니온(UNION) (0) | 2023.02.21 |
[Oracle] 조인(JOIN) (0) | 2023.02.21 |