초이준철
물낌표
초이준철
전체 방문자
오늘
어제
  • 분류 전체보기 (59)
    • Python (6)
    • SQL (37)
    • 경험 (4)
    • Tableau (7)
      • Tableau 기본 (2)
      • Tableau 빅스데이터 22여름 대학생 TWBX (5)
    • 책으로 배우는 공부 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • mysql set
  • 새빨간 거짓말 통계
  • MYSQL 테이블 구조
  • 데벨챌
  • 통계책
  • 데이터 심리학
  • MYSQL group by
  • 데이터 분석 방법
  • 물낌표
  • TWBX 대학생
  • Mysql ifnull
  • mysql concat
  • 데이터리안
  • MYSQL desc
  • mysql 문자열 자르기
  • MYSQL 집계함수
  • mysql 문자열 연결
  • MYSQL insert
  • MYSQL CASE문
  • TWBX 과제

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
초이준철

?!

[MySQL] 기본키, 외래키 값 변경에 대하여 (feat. on update cascade)
SQL

[MySQL] 기본키, 외래키 값 변경에 대하여 (feat. on update cascade)

2023. 5. 2. 13:54
테이블 생성하기
-- member1 table
create table member1 (
name_id int not null auto_increment,
name char(6),
primary key(name_id)
);

-- buy1 table
create table buy1 (
buy_id int not null auto_increment,
product char(10),
name_id int,
primary key(buy_id)
);

 

데이터 넣기
-- member table
insert into member1 values (null,'CHOI'), (null,'KIM');

-- buy table
insert into buy1 values (null,'노트북', 1), (null,'폰',2);

 

테이블 상태

member1 table
buy1 table

 

관계 설정하기
alter table buy1 foreign key (name_id) references member1(name_id);

FK - 외래키 / PK - 기본키

 

기본키 변경 (member1 기본키 name_id 1을 3으로 변경하기)
-- 기본키 변경하기 (name_id 1을 3으로 변경)
update member1
set name_id = 3
where name = 'CHOI';

결과값

위와 같이 관계가 설정되어 있을 때 기본키를 변경하려고 하면 에러가 뜨게 됩니다.

외래키 변경도 한 번 볼까요?

 

외래키 변경 (buy1 외래키 name_id 2를 3으로 변경하기)
-- 외래키 변경하기 (name_id 2를 3으로 변경)
update buy1
set name_id = 3
where product = '폰';

결과값

위와 같이 관계가 설정되어 있을 때 외래키를 변경하려고 하면 에러가 뜨게 됩니다.

 

단, 기본키에 있는 값을 바탕으로 외래키를 수정하면 변경이 됩니다.
예를 들어) buy1 외래키 name_id = 2를 1로 변경할 때는 수정이 돼요. 왜냐하면 member1 기본키에 name_id = 1이 있기 때문

 

 

기본키를 변경하고 싶을 때는 on update cascade 사용하기

 

기본키 변경하면 외래키도 함께 변경하기
-- on update cascade 사용하는 법
alter table buy1 foreign key(name_id) references member1(name_id) on update cascade;

 

기본키 변경 (member1 기본키 name_id 1을 3으로 변경하기)
-- 기본키 변경하기 (name_id 1을 3으로 변경)
update member1
set name_id = 3
where name = 'CHOI';

 

아래와 같이 on update cascade를 설정해준 상태에서 기본키를 변경하게 되면, 기본키 + 외래키 함께 변경되는 것을 확인 할 수 있어요.

member1 table 기본키 변경 후
buy1 table 외래키도 함께 변경

 

주의해야 할 것은 외래키만 변경하는 것은 불가능해요. (단, 기본키 값으로 존재한다면 가능)

예를 들어, buy1 외래키 name_id = 2를 4로 변경한다면 에러가 발생해요.

변경하고 싶다면? 기본키를 4로 바꿔주면, 외래키도 4로 함께 바뀌게 됩니다.

 

즉, 기본키가 중심이 되어야 한다는 겁니다. 

 

저작자표시 (새창열림)
    'SQL' 카테고리의 다른 글
    • [MySQL] HackerRank Pivot Table 문제 (CASE문, SET, 서브쿼리 활용)
    • [MySQL] SET을 통해 변수 사용하기
    • [MySQL] 컬럼명 변경 / 컬럼 타입 및 디폴트값 변경 / 컬럼 삭제 및 추가 (예시로 쉽게)
    • [MySQL] IF문 예제로 쉽게 알아보기
    초이준철
    초이준철
    WNWA

    티스토리툴바