안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
CONSTRAINT
- 제약 조건
- 테이블의 컬럼에 대해서 데이터 무결성을 지키기 위해 설정하는 조건
※ 데이터 무결성이란?
데이터가 일관되고, 정확하게 유지 되는 것
- not null을 제외하고 constraint_name을 반드시 지정 및 table_level로 작성
① not null (C) : 해당 컬럼에 null 값을 허용하지 않음
② unique (U) : 레코드 별로 해당 컬럼에 중복을 허용하지 않음
③ primary key (P) : 식별자 컬럼을 지정, 레코드를 구별하기 위한 고유 값을 가진 컬럼 → 테이블 당 하나만 허용 / null 허용 X
④ foreign key (R) : 외래키. 부모 테이블의 특정 컬럼 값만 사용 가능하도록 제약
⑤ check (C) : 해당 컬럼의 값의 범위/목록을 제한 (도메인을 설정하는 제약 조건)
PRIMARY KEY
- 기본 키
- 레코드를 식별할 수 있는 식별자 컬럼에 지정하는 제약 조건
- 테이블 당 하나의 PK만 지정 가능
- 해당 컬럼을 null을 허용하지 않고, 레코드 별로 고유해야 함
- 단일 컬럼 PK / 복합 컬럼 PK
-- drop table member_2;
create table member_2(
id varchar2(20),
password varchar2(20) not null,
name varchar2(50) not null,
email varchar2(150) not null,
reg_date date default sysdate,
constraint pk_member_2_id primary key(id), -- 테이블 레벨
constraint uq_member_2_email unique(email)
);
중복 값 입력 시
insert into
member_2 (id, password, name, email)
values ('honggd', '1234', '홍길동', 'honggd@gmail.com');
insert into
member_2 (id, password, name, email)
values ('honggd', '2345', '홍길순', 'hgd@gmail.com');
-- ORA-00001: unique constraint (KH.PK_MEMBER_2_ID) violated
PK로 지정한 id에 중복되는 값이 들어가니
"ORA-00001: unique constraint (KH.PK_MEMBER_2_ID) violated" 에러 메세지가 출력 되는 것을 확인할 수 있습니다.
null 값 입력 시
insert into
member_2 (id, password, name, email)
values (null, '1234', '신사임당', 'sinsa@gmail.com');
-- ORA-01400: cannot insert NULL into ("KH"."MEMBER_2"."ID")
null 값 또한 "ORA-01400: cannot insert NULL into ("KH"."MEMBER_2"."ID")" null 값을 삽입할 수 없다는 에러 메세지가 출력 되는 것을 확인할 수 있습니다.
고유 값이기 때문에 하나의 행을 식별하는 용도로 PK컬럼을 자주 사용합니다.
update member_2 set name = '홍길똥' where id = 'honggd';
select * from member_2 where id = 'honggd'; -- 1행 또는 0행의 결과집합을 리턴
--delete from member where id = 'honggd';
복합 PK (Composite PK)
- 여러 컬럼을 묶어서 고유하게 관리, 식별자로 사용
create table tb_order_2 (
product_no number, --상품 식별자
member_id varchar2(20), --회원 식별자
order_date date default sysdate, --주문일자
cnt number default 1,
constraint pk_tb_order_2 primary key(product_no, member_id, order_date)
);
insert into tb_order_2 values (1, 'honggd', default, 10);
insert into tb_order_2 values (1000, 'honggd', default, 10);
insert into tb_order_2 values (1000, 'honggd', default, 5);
-- ORA-00001: unique constraint (KH.PK_TB_ORDER_2) violated
product_no, member_id, order_date를 묶어서 관리하기 때문에 해당 컬럼들의 값이 모두 동일하면
"ORA-00001: unique constraint (KH.PK_TB_ORDER_2) violated" 마찬가지로 해당 에러 메세지를 출력합니다.
insert into tb_order_2 values (1000, null, default, 10);
-- ORA-01400: cannot insert NULL into ("KH"."TB_ORDER_2"."MEMBER_ID")
PK컬럼을 null 값을 허용하지 않으므로, 복합 PK 컬럼 중 하나라도 null일 수 없습니다.
"ORA-01400: cannot insert NULL into ("KH"."TB_ORDER_2"."MEMBER_ID")"
select
product_no,
member_id,
to_char(order_date, 'yyyy-mm-dd hh24:mi:ss') as order_date,
cnt
from
tb_order_2;
'DataBase > Oracle' 카테고리의 다른 글
DDL/CONSTRAINT) CHECK 제약 조건 (0) | 2022.04.26 |
---|---|
DDL/CONSTRAINT) FOREIGN KEY 제약 조건 (FK 제약 조건 삭제 옵션, 식별 관계/비식별 관계) (0) | 2022.04.26 |
DDL/CONSTRAINT) UNIQUE 제약 조건 (제약 조건 작성법, constraint_name) (0) | 2022.04.26 |
DDL/CONSTRAINT) NOT NULL 제약 조건 (0) | 2022.04.26 |
DDL) CREATE 구문 (테이블/열 이름 생성 규칙, 주석) (0) | 2022.04.26 |