[MySQL] FOREIGN KEY / REFERENCE KEY / CASCADE


FOREIGN KEY (์™ธ๋ž˜ํ‚ค) / REFERENCE KEY (์ฐธ์กฐํ‚ค)


Key Constraint : Primary Key (PK) / Reference Key (RK) / Foreign Key (FK)

MySQL ์ œ์•ฝ์กฐ๊ฑด (Constraint) - NOT NULL, DEFAULT, PRIMARY KEY


  • ๋‘ ํ…Œ์ด๋ธ”์„ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค

  • ์™ธ๋ž˜ํ‚ค๊ฐ€ ํฌํ•จ๋œ ํ…Œ์ด๋ธ” : ์ž์‹ ํ…Œ์ด๋ธ” / ์™ธ๋ž˜ํ‚ค ๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” ํ…Œ์ด๋ธ” : ๋ถ€๋ชจ ํ…Œ์ด๋ธ”

  • ํŠน์ • ํ…Œ์ด๋ธ”์—์„œ RK๋ฅผ ์ง€์ •ํ•  ๋•Œ, ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” PK๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๋•Œ RK์—์„œ ์ง€์ •ํ•˜๋Š” PK๋ฅผ ์™ธ๋ž˜ํ‚ค๋ผ๊ณ  ํ•จ

  • ์™ธ๋ž˜ํ‚ค ๊ฐ’์€ NULL์ด๊ฑฐ๋‚˜ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค ๊ฐ’๊ณผ ๋™์ผํ•ด์•ผ ํ•จ

  • ์™ธ๋ž˜ํ‚ค๋กœ ์ง€์ •ํ•  ๋‘ ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ๋Š” ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด์–ด์•ผ ํ•จ

  • ์ผ๋ฐ˜์ ์œผ๋กœ RK, FK๋Š” PK์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉ

  • ์ฐธ์กฐํ‚ค/์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด (Constraint)

    • 2๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด

    • FOREIGN KEY ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•  ๋•Œ ์ฐธ์กฐ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ๋Š” ๋ฐ˜๋“œ์‹œ UNIQUE๋‚˜ PRIMARY KEY ์ œ์•ฝ ์กฐ๊ฑด์ด ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•จ

    • ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ” ์ค‘ ํ•œ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์— FK๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๋‚˜๋จธ์ง€ ๋‹ค๋ฅธ ํ•œ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์— RK๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•จ

  • ex)

      create table stuList(
          num			int			unique auto_increment,
          stuNum		char(10)	not null,
          name		char(10)	not null,
          constraint primary key(stuNum)
      );
    
      create table scoreList(
          num			int			unique auto_increment,
          year		int			not null,
          period		int			not null,
          score		int			not null default(0),
          code		char(10)	not null,
          constraint primary key(year, period, code),
          constraint foreign key(code) references stuList(stuNum)
      );
    



ON DELETE CASCADE / ON UPDATE CASCADE


    • Foreign Key ์ ์šฉ ์‹œ ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ row๋ฅผ ๋จผ์ € ์ง€์šธ ์ˆ˜ ์—†์Œ, ์ž์‹ํ…Œ์ด๋ธ”์˜ row๋ฅผ ์ง€์šฐ๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅ

    • ์—ฐ๊ฒฐ๋œ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋ถ€ ์ง€์šฐ๋ฉด ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์ง€์šธ ์ˆ˜ ์žˆ์Œ

  • CASCADE -> ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ row์— DELETE ๋˜๋Š” UPDATE ์ ์šฉ ์‹œ, ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๋งค์น˜๋˜๋Š” row์—๋„ ๋˜‘๊ฐ™์ด ๋ฐ˜์˜๋จ

  • ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์ง€์šธ ์ˆ˜ ์žˆ์–ด ๋ฐ์ดํ„ฐ์˜ ๊ด€๋ฆฌ๊ฐ€ ํŽธ๋ฆฌํ•ด์ง€๊ณ  ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ

  • ์ ์šฉ ๋ฐฉ๋ฒ•

      CREATE TABLE table_name(
          ...
          FOREIGN KEY(์ปฌ๋Ÿผ๋ช…)
              REFERENCES ์ฐธ์กฐํ• ํ…Œ์ด๋ธ”๋ช…(์ฐธ์กฐํ• ์ปฌ๋Ÿผ๋ช…)
              ON DELETE CASCADE
      );
    

Categories:

MySQL