본문 바로가기
SQL/이론

외래키(foreign key)/ join

by SEOKIHOUSE 2023. 4. 17.

※constraint는 데이터베이스에서 테이블의 컬럼이나 테이블 간의 관계를 정의하는 데 사용되는 제약 조건을 나타내는 키워드입니다. 위의 SQL 문에서 constraint는 두 개의 외래 키(Foreign Key) 관계를 정의

 

CREATE TABLE tbl_order (
	orderno CHAR(4) , 
	userno CHAR(4),             
  		constraint fk_order_user FOREIGN KEY(userno) REFERENCES tbl_user(userno),
	prodno CHAR(4),
		constraint fk_order_prod FOREIGN KEY(prodno) REFERENCES tbl_product(prodno),
	ea INT, 	
	PRIMARY KEY (orderno, userno, prodno)
);

1. constraint fk_order_prod 외래키 이름 지정해주고 (굳이 안적어도된다) - 제약사항의 이름을 지정해주는것

2. FOREIGN KEY(userno) REFERENCES tbl_user(userno)  --제약사항

tbl_order 테이블의 userno 컬럼에 저장되는 값이 tbl_user 테이블의 userno 컬럼에 존재하는 값 중 하나여야 함을 나타냅니다. 이를 통해 tbl_order 테이블의 userno 컬럼과 tbl_user 테이블의 userno 컬럼 간의 무결성(integrity)을 유지할 수 있습니다.


1 연습해보기

 

 

위에두개 합치기


2 다른예제로 연습


3 또 다른 예시

dd는 값이 없어서 추가못한다 


tbl_b는 잘지워진다 근데 tbl_a는 이건 왜 안지워지냐 ?

---> bc2 열은 반드시 ac2에 있는 값 중 하나여야한다 

-->즉 외래키로 묶여있어서 삭제할수가 없다


이것도 외래키땜에 안된다 AA가 이미 쓰이고 있따 


drop하고 create문을 수정해보자 

--CASCADE :데이터 변경되면 같이 변경되도록 무결성(결함없도록)을 유지해준다 (같이삭제)

-->연결되어 있는 주인table에서 update랑 delete해야한다

원래는 변경못하던게 AA가 DD로 변경됐다


삭제를 해보자 

DELETE SET NULL  ---> 삭제하고 null로 세팅해라