...

์ ์ฝ ์กฐ๊ฑด(constraint)
์ ์ฝ ์กฐ๊ฑด(constraint)์ด๋ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์งํค๊ธฐ ์ํด, ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ ์คํ๋๋ ๊ฒ์ฌ ๊ท์น์ ์๋ฏธํฉ๋๋ค.
์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์ CREATE ๋ฌธ์ผ๋ก ํ ์ด๋ธ์ ์์ฑํ ๋๋ ALTER ๋ฌธ์ผ๋ก ํ๋๋ฅผ ์ถ๊ฐํ ๋๋ ์ค์ ํ ์๋ ์์ต๋๋ค.
NOT NULL
- NULL ๋นํ์ฉ
- ์ค๋ณต๊ฐ ํ์ฉ
NOT NULL ์ ์ฝ ์กฐ๊ฑด์ CREATE ๋ฌธ์ผ๋ก ํ ์ด๋ธ์ ์์ฑํ ๋๋, ๋์ค์ ALTER ๋ฌธ์ผ๋ก ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
CREATE TABLE Test
(
ID INT NOT NULL,
Name VARCHAR(30),
ReserveDate DATE,
RoomNum INT
);

ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
ADD ํ๋์ด๋ฆ ํ๋ํ์
NOT NULL -- ์๋ก์ด not null ์ง์ ํ ํ๋ ์ถ๊ฐ
ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
MODIFY COLUMN ํ๋์ด๋ฆ ํ๋ํ์
NOT NULL -- ๊ธฐ์กด ํ๋๋ฅผ not null๋ก ์์
UNIQUE
- NULL ํ์ฉ
- ์ค๋ณต๊ฐ ๋นํ์ฉ
CREATE TABLE ํ
์ด๋ธ์ด๋ฆ
(
ํ๋๋ช
ํ๋ํ์
UNIQUE, -- ์ ์ธํ ๋ ๊ฐ์ด ์ถ๊ฐ
...
)
CREATE TABLE ํ
์ด๋ธ์ด๋ฆ
(
ํ๋์ด๋ฆ ํ๋ํ์
,
...,
[CONSTRAINT ์ ์ฝ์กฐ๊ฑด์ด๋ฆ] UNIQUE (ํ๋์ด๋ฆ) -- ๋ค์ ๋ฐ๋ก ์ถ๊ฐ. ์ด๋ฆ ์ค์ ๊ฐ๋ฅ
)
์์ ๋ ๋ฌธ๋ฒ์ ๋ชจ๋ ํด๋น ํ๋์ UNIQUE ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํฉ๋๋ค.
์ด๋ ๋ ๋ฒ์งธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด, ํด๋น ์ ์ฝ ์กฐ๊ฑด์ ์ด๋ฆ์ ์ค์ ํ ์ ์์ต๋๋ค.
ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
ADD ํ๋์ด๋ฆ ํ๋ํ์
UNIQUE -- ์ด๋ฆ ์ค์ ๋ถ๊ฐ๋ฅ
ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
ADD [CONSTRAINT ์ ์ฝ์กฐ๊ฑด์ด๋ฆ] UNIQUE (ํ๋์ด๋ฆ) -- ์ด๋ฆ ์ค์ ๊ฐ๋ฅ
โUNIQUE ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํ๋ฉด, ํด๋น ํ๋๋ ์๋์ผ๋ก ๋ณด์กฐ ์ธ๋ฑ์ค(INDEX)๋ก ๋ง๋ค์ด์ง๋๋ค.
๋ง์ผ ์ ์ฝ ์กฐ๊ฑด์ ์ด๋ฆ์ ์ค์ ํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ํด๋น ์ ์ฝ ์กฐ๊ฑด์ ์ญ์ ํ ์ ์์ต๋๋ค.
-- ์ ๋ํฌํค๋ ํด๋ฌ์คํฐ ์ธ๋ฑ์ค๊ฐ ์๋ ๊ทธ๋ฅ ๋ณด์กฐ ์ธ๋ฑ์ค ์ด๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ง ์ญ์ ํ์ฌ๋ ๋๋ค.
ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
DROP INDEX ์ ์ฝ์กฐ๊ฑด์ด๋ฆ
PRIMARY KEY
- NULL ๋นํ์ฉ
- ์ค๋ณต๊ฐ ๋นํ์ฉ
- ํ ์ด๋ธ๋น ํ๋
CREATE TABLE ํ
์ด๋ธ์ด๋ฆ
(
ํ๋์ด๋ฆ ํ๋ํ์
PRIMARY KEY,
...
)
CREATE TABLE ํ
์ด๋ธ์ด๋ฆ
(
ํ๋์ด๋ฆ ํ๋ํ์
,
...,
[CONSTRAINT ์ ์ฝ์กฐ๊ฑด์ด๋ฆ] PRIMARY KEY (ํ๋์ด๋ฆ)
)
์์ ๋ ๋ฌธ๋ฒ์ ๋ชจ๋ ํด๋น ํ๋์ PRIMARY KEY ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํฉ๋๋ค.
์ด๋ ๋ ๋ฒ์งธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด, ํด๋น ์ ์ฝ ์กฐ๊ฑด์ ์ด๋ฆ์ ์ค์ ํ ์ ์์ต๋๋ค.
ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
ADD ํ๋์ด๋ฆ ํ๋ํ์
PRIMARY KEY
โ
ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
ADD [CONSTRAINT ์ ์ฝ์กฐ๊ฑด์ด๋ฆ] PRIMARY KEY (ํ๋์ด๋ฆ)
-- ๊ธฐ๋ณธํค ์ญ์
ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
DROP PRIMARY KEY
FOREIGN KEY
- FOREIGN KEY ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํ ํ๋๋ ์ธ๋ ํค๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ,
- ํ ํ ์ด๋ธ์ ๋ค๋ฅธ ํ ์ด๋ธ๊ณผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
FOREIGN KEY ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํ ๋ ์ฐธ์กฐ๋๋ ํ ์ด๋ธ์ ํ๋๋ ๋ฐ๋์ UNIQUE๋ PRIMARY KEY ์ ์ฝ ์กฐ๊ฑด์ด ์ค์ ๋์ด ์์ด์ผ ํฉ๋๋ค.
์ธ๋ํค๋ ์ค์ ํ ํ๋๊ฐ ๊ธฐ๋ณธํค๋ ์ ๋ํฌ๊ฐ ์๋๋ฉด ์์ฑ์ด ์ ์ฝ๋ฉ๋๋ค.
CREATE TABLE ํ
์ด๋ธ์ด๋ฆ
(
ํ๋์ด๋ฆ ํ๋ํ์
,
...,
[CONSTRAINT ์ ์ฝ์กฐ๊ฑด์ด๋ฆ] FOREIGN KEY (ํ๋์ด๋ฆ) REFERENCES ํ
์ด๋ธ์ด๋ฆ2 (ํ๋์ด๋ฆ)
)
์์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ํด๋น ํ๋์ FOREIGN KEY ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํฉ๋๋ค.
์ด๋ ์ฐธ์กฐ๋๋ ํ ์ด๋ธ์ ์ด๋ฆ์ REFERENCES ํค์๋ ๋ค์์ ๋ช ์๋ฉ๋๋ค.
โ
๋ค์ ์์ ๋ Test2 ํ ์ด๋ธ์ ParentID ํ๋์, Test1 ํ ์ด๋ธ์ ID ํ๋๋ฅผ ์ฐธ์กฐํ๋ FOREIGN KEY ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํ๋ ์์ ์ ๋๋ค.
CREATE TABLE Test2
(
ID INT,
ParentID INT,
FOREIGN KEY (ParentID) REFERENCES Test1(ID) ON UPDATE CASCADEโ
);
์์ ์์ ์์ Test2 ํ ์ด๋ธ์ ParentID ํ๋๋ Test1 ํ ์ด๋ธ์ ID ํ๋๋ฅผ ์ฐธ์กฐํ๋๋ก ์ค์ ๋ฉ๋๋ค.
๋ฐ๋ผ์ Test1 ํ ์ด๋ธ์ ID ํ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ๊ฐ์ ๊ฐ์ Test2 ํ ์ด๋ธ์ ParentID ํ๋๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
โ
alter๋ฌธ์ผ๋ก๋ ์ธ๋ํค๋ฅผ ์ง์ ํ ์๋ ์์ต๋๋ค.
alter table '์ถ๊ฐํ ํ
์ด๋ธ ๋ช
'
add constraint '์ ์ฝ์กฐ๊ฑด๋ช
' foreign key '์ปฌ๋ผ๋ช
' references '๋ถ๋ชจ ํ
์ด๋ธ ๋ช
' ('์ฐธ์กฐํ๋ PK ์ปฌ๋ผ๋ช
') [ON DELETE CASCADE/ ON UPDATE CASCADE];
-- ์ธ๋ํค ์ญ์
ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
DROP FOREIGN KEY ์ ์ฝ์กฐ๊ฑด์ด๋ฆ
ON DELETE / ON UPDATE
FOREIGN KEY ์ ์ฝ ์กฐ๊ฑด์ ์ํด ์ฐธ์กฐ๋๋ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ์ ์์ ์ด๋ ์ญ์ ๊ฐ ๋ฐ์ํ๋ฉด, ์ฐธ์กฐํ๊ณ ์๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ๊ฐ์ด ์ํฅ์ ๋ฐ์ต๋๋ค.
์ด๋ ์ฐธ์กฐํ๊ณ ์๋ ํ ์ด๋ธ์ ๋์์ ๋ค์ ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ FOREIGN KEY ์ ์ฝ ์กฐ๊ฑด์์ ๋ฏธ๋ฆฌ ์ค์ ํ ์ ์์ต๋๋ค.
1. ON DELETE + ๋์
2. ON UPDATE + ๋์
์ฐธ์กฐ๋๋ ํ ์ด๋ธ์ ๊ฐ์ด ์ญ์ ๋ ๊ฒฝ์ฐ์ ๋์์ ON DELETE ๊ตฌ๋ฌธ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
๋ํ, ์ฐธ์กฐ๋๋ ํ ์ด๋ธ์ ๊ฐ์ด ์์ ๋ ๊ฒฝ์ฐ์ ๋์์ ON UPDATE ๊ตฌ๋ฌธ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
์ด๋ ์ค์ ํ ์ ์๋ ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- CASCADE : ์ฐธ์กฐ๋๋ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์์ ํ๋ฉด, ์ฐธ์กฐํ๋ ํ ์ด๋ธ์์๋ ์ญ์ ์ ์์ ์ด ๊ฐ์ด ์ด๋ฃจ์ด์ง๋๋ค.
- SET NULL : ์ฐธ์กฐ๋๋ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์์ ํ๋ฉด, ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ NULL๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
- NO ACTION : ์ฐธ์กฐ๋๋ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์์ ํด๋, ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
- SET DEFAULT : ์ฐธ์กฐ๋๋ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์์ ํ๋ฉด, ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ํ๋์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
- RESTRICT : ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋จ์ ์์ผ๋ฉด, ์ฐธ์กฐ๋๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค.
๋ค์ ์์ ๋ Test ํ ์ด๋ธ์ ID ํ๋๋ฅผ Customer ํ ์ด๋ธ์ ID ํ๋๋ฅผ ์ฐธ์กฐํ๋ ์ธ๋ ํค๋ก ์ค์ ํ๋ ์์ ์ ๋๋ค.
์ด๋ ์ฐธ์กฐ๋๋ ํ๋์ ๋ฐ์ดํฐ๊ฐ ์์ ๋ ๋๋ CASCADE ๋ฐฉ์์ผ๋ก, ์ญ์ ๋ ๋๋ RESTRICT ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค.
CREATE TABLE Test2
(
ID INT,
ParentID INT,
FOREIGN KEY (ParentID)
REFERENCES Test1(ID) ON UPDATE CASCADE ON DELETE RESTRICT
);
์์ ์์ ์์ Test2 ํ ์ด๋ธ์ ID ํ๋๊ฐ ์ฐธ์กฐํ๊ณ ์๋ Test1 ํ ์ด๋ธ์ ID ๊ฐ์ด ์์ ๋๋ฉด, Test2 ํ ์ด๋ธ์ ID ๊ฐ๋ ๊ฐ์ด ์์ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Test2 ํ ์ด๋ธ์ ๋ ์ฝ๋ ์ค์์ Test1 ํ ์ด๋ธ์ ๋ ์ฝ๋๊ฐ ID ํ๋๋ฅผ ์ฐธ์กฐํ๋ ๋ ์ฝ๋๋ ์ญ์ ํ ์ ์์ต๋๋ค.
DEFAULT
- DEFAULT ์ ์ฝ ์กฐ๊ฑด์ ํด๋น ํ๋์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
๋ง์ฝ ๋ ์ฝ๋๋ฅผ ์ ๋ ฅํ ๋ ํด๋น ํ๋ ๊ฐ์ ์ ๋ฌํ์ง ์์ผ๋ฉด, ์๋์ผ๋ก ์ค์ ๋ ๊ธฐ๋ณธ๊ฐ์ ์ ์ฅํฉ๋๋ค.
CREATE TABLE ํ
์ด๋ธ์ด๋ฆ
(
ํ๋์ด๋ฆ ํ๋ํ์
DEFAULT ๊ธฐ๋ณธ๊ฐ,
...
)
-- ๊ธฐ๋ณธ๊ฐ ์ถ๊ฐ
ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
ADD ํ๋์ด๋ฆ ํ๋ํ์
DEFAULT ๊ธฐ๋ณธ๊ฐ
-- ๊ธฐ๋ณธ๊ฐ ์ค์
ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
MODIFY COLUMN ํ๋์ด๋ฆ ํ๋ํ์
DEFAULT ๊ธฐ๋ณธ๊ฐ
-- DEFAULT ์ญ์
ALTER TABLE ํ
์ด๋ธ์ด๋ฆ
ALTER ํ๋์ด๋ฆ DROP DEFAULT
์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.