[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 );