FOREIGN KEY

yoon__0_0·2024년 5월 18일
0

이어드림 수업

목록 보기
36/103

FOREIGN KEY

  • 외래키
  • 사용이유 : 데이터 무결성 유지
  • UNIQUE 이나 PRIMARY KEY 제약 조건이 있어야 사용할 수 있음.
  • 두개의 테이블을 관계를 만들어줌
  • 하나에서 삭제 및 업데이트 한다고 해도 error 가 뜸.
  • 혹은 다른 설정들이 존재함. (다른 테이블도 업데이트 하게 하거나 등등

실습

1) db와 table 생성

  • foreign key 을 생성해주기
CREATE database fk;
use fk;

CREATE table user (
ui Int PRIMARY key AUTO_INCREMENT,
name varchar(20) NOT null
);

create table income (
ii int primary key auto_increment,
amount int not null,
ui int,
FOREIGN KEY (ui) REFERENCES user(ui)
);

2) 데이터 추가

insert into user(name)
values ('A'),('B'),('C');

insert into income(amount, ui)
values (100,1),(200,2), (500,3), (700,1), (400,1);

3) foreign KEY 로 연결되어 있는 것을 추가해보기

  • ui 가 서로 연결되어 있는데, income table 에 user table 에는 없는 ui를 만들려고함. -> 오류
INSERt into income (amount, ui) values (100,4);

  • 삭제도 동일한 오류가 생성됨
DELETE from user WHERE  ui = 1 LIMIT 1;
  • 대신, income에 있는 것을 삭제한다고 무결성이 깨지지는 않기 때문에 실행가능
  • 그리고, user 에 4를 생성한 후에 income에 4를 추가하는 것도 가능함. (무결성을 지키기)

4) foreign key 삭제


ALTER TABEL income DROP FOREIGN KEY fk_user;

설정

  • on update, on delete 사용
/* income table의 fk_user 컬럼을 추가해주는데 
이는 user table에 있는 ui 값을 외래 키로 가지고 올것. 
그리고 update는 cascade를 이용하고, delete는 set null 설정값을 이용해라 */

alter table income ADD constraint fk_user
foreign key(ui) references user(ui)
on update cascade on DELETE set null;
  • cascade
    • 동기화 : 삭제가 안되는게 아니라 삭제하면 삭제해주고, 업데이트 하면 업데이트 하게
  • set null

    • 무결성이 깨지면 NULL 로 변경
    • 만약 삭제하면 다른 테이블의 데이터를 null값으로 변경
  • no action

    • 변경해주지 않음
  • set default

    • 무결성이 깨지면 default 값으로 변경
  • restrict

    • 무결성이 깨지면 에러발생
    • 원래 기본적으로 이게 설정되어 있음.
profile
신윤재입니다

0개의 댓글