MySQL 기본키 외래키 - MySQL gibonki oelaeki

사전 준비

실습 환경

mysql 8.0.27

테이블 생성

create table users( user_id int not null auto_increment, name varchar(100), primary key(user_id) ); create table board( board_id int not null auto_increment, title varchar(100), content varchar(100), user_id int, primary key(board_id) );

데이터 삽입

insert into users(name) values('hajoo1'); insert into users(name) values('hajoo2'); insert into board(title, content, user_id) values('title1', 'content1', 1); insert into board(title, content, user_id) values('title2', 'content2', 2);

non-relational
  • 외래키 설정 X

  • users 테이블 user_id를 2 -> 3으로 변경
  • 기본키는 연관 관계가 없다면 변경이 가능하다.

update users set user_id = 3 where name = 'hajoo2';

non-cascade
  • 외래키 설정 O, cascade X

외래키 설정

alter table board add constraint ex_fk foreign key(user_id) references users(user_id);

users 기본키 변경

  • users 테이블 user_id를 2 -> 3으로 변경
  • 연관 관계에 있는 부모 행은 변경이나 삭제가 불가능하다고 나온다.

update users set user_id = 3 where name = 'hajoo2'; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`board`, CONSTRAINT `ex_fk` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`))

board 외래키 변경

  • board 테이블 user_id를 2 -> 3으로 변경
  • 연관 관계에 있는 부모 행은 변경이나 삭제가 불가능하다고 나온다.

update board set user_id = 3 where title = 'title2'; ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`board`, CONSTRAINT `ex_fk` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`))

  • board 테이블 user_id를 2 -> 1로 변경
  • board 테이블 user_id만 1로 변경됨

update board set user_id = 1 where title = 'title2';

  • 외래키의 경우에 부모 테이블에 존재하는 키일 경우에는 변경이 가능하다.
update-cascade
  • 외래키 설정 O, cascade O

외래키 설정

alter table board add constraint ex_fk foreign key(user_id) references users(user_id) on update cascade;

users 기본키 변경

  • users 테이블 user_id를 2 -> 3으로 변경
  • users, board 테이블 user_id가 함께 변경됨

update users set user_id = 3 where name = 'hajoo2';

board 외래키 변경

  • board 테이블 user_id를 3 -> 4로 변경
  • 연관 관계에 있는 부모 행은 변경이나 삭제가 불가능하다고 나온다.

create table users( user_id int not null auto_increment, name varchar(100), primary key(user_id) ); create table board( board_id int not null auto_increment, title varchar(100), content varchar(100), user_id int, primary key(board_id) ); 0

  • board 테이블 user_id를 3 -> 1로 변경
  • board 테이블 user_id만 1로 변경이 됨

update board set user_id = 1 where title = 'title2';

  • 외래키의 경우에 부모 테이블에 존재하는 키일 경우에는 변경이 가능하다.

관련 게시물

Toplist

최신 우편물

태그