본문 바로가기
DB/SQL

SQL 제약조건 PK(Primary key),FK(Foreign Key)

by wonduk 2023. 6. 28.
728x90

기본키 PK(Primary key) 특징

 

1.중복방지

 

2.not null

 

3.index 자동생성

--각테이블에 있는게 권장사항입니다.

 

pk기본 사용방법

CREATE TABLE 테이블명(
컬럼 데이터타입 CONSTRAINT 제약_조건_이름 PRIMARY KEY,
);

 

 

PK를 이용한 테이블 생성 예제

create table member2(
    id varchar2(50) primary key,
    name varchar2(50) not null,
    gender char(1) not null,
    joinDate date default sysdate
);

id와 같이 겹치지 않는 데이터를 PK로 지정해야 한다.

 

 

 

 

 

 

 

 

 


 참조키 FK(Foreign Key) 특징

1.다른 테이블의 primary key를 참조해서 데이터 무결성을 유지


2.참조하고 있는 키의 데이터와 null만 저장가능

 

3. 다른 테이블의 Primary Key값이 아닌 다른 값이 저장되는 것을 막아준다.
-> RDB는 테이블간에 Relation을 맺어서 저장하게 되는데 이 때 FK 중요한 역할을 함
->FK가 없으면 데이터를 신뢰할 수 없음, 참조무결성이 보장되지 않는다.


4.식별관계: 참조키가 pk역할도 하는경우

 

5.비 식별관계: 참조키가 기본키역할을 하지 않는 경우

 

6.일반적으로 식별관계를 추천하지 않음

 

FK기본 사용방법

CREATE TABLE 테이블명(

컬럼 데이터타입 CONSTRAINT 제약_조건_이름 FOREIGN KEY

REFERENCES 참조할_테이블 (참조할_컬럼)

[ON DELETE CASCADE | ON DELETE SET NULL]

 

 

FK사용예(1)

-- member2
create table member2(
    id varchar2(50) primary key,
    name varchar2(50) not null,
    gender char(1) not null,
    joinDate date default sysdate
); 

insert into member2 values('hkd','홍길동','m','2001-01-01');
insert into member2 values('lss','이순신','m','2003-02-01');
insert into member2 values('hj','황진이','f','2002-11-13');
insert into member2 values('wg','왕건','m','2005-12-21');
insert into member2 values('pms','박문수','m','2006-11-09');

-- goods
create table goods(
    gno number primary key, --상품번호
    name varchar(50) not null, --상품이름
    price number not null --가격
);

insert into goods values(1,'mp3',10000);
insert into goods values(2,'camera',50000);
insert into goods values(3,'pc',700000);


-- orders
create table orders(
    ono number primary key, --주문번호
    id varchar2(50) not null references member2(id),--주문자 아이디
    orderDate date default sysdate --주문날짜
);

insert into  orders values(1,'hkd','2001-03-27');
insert into orders values(2,'wg','2005-04-17');
insert into orders values(3,'hkd','2006-02-07');

-- ordersDetail 상품상세정보
 번호,주문번호,상품번호,상품수량
create table ordersDetail(
    no number primary key, --넘버
    ono number not null references orders(ono), --주문번호
    gno number not null references goods(gno), --상품번호
    ea number not null --ea 판매갯수
);

 

(2)

    ono number not null references orders(ono), --주문번호
    gno number not null references goods(gno), --상품번호

1번의 코드가 있을때  다음내용에서 2번코드부분이 FK를 사용한 부분입니다.

member2(id(PK). name, gender, joinDate)

good( gno(PK), name, price)

orders(ono(PK), id, orderDate)

ordersDatail( no(PK), ono(FK), gno(FK), ea)

 

 

 

 

 

 

 

 

 

728x90

'DB > SQL' 카테고리의 다른 글

SQL DATE연산자  (0) 2023.06.28
SQL 집계함수(sum,avg,min ....)  (0) 2023.06.28
SQL decode를 이용하여 출력하기  (0) 2023.06.28
SQL DML,DDL 연습 문제  (0) 2023.06.28
SQL join을 이용한 DML 연습 문제  (0) 2023.06.28