๐Ÿ“ŒSQL ๋ฌธ๋ฒ• - ํ…Œ์ด๋ธ” ์ƒ์„ฑ(CREATE TABLE)๊ณผ ์ œ์•ฝ์กฐ๊ฑด(Constraint)

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด ๋จผ์ € ๊ทธ๋ฆ‡(ํ…Œ์ด๋ธ”)์„ ๋งŒ๋“ค์–ด์•ผ๊ฒ ์ฃ ? ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” SQL์—์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ(CREATE)ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ, ์ œ์•ฝ ์กฐ๊ฑด(Constraint)์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!
avatar
2025.04.07
ยท
10 min read

4678

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด ๋จผ์ € ๊ทธ๋ฆ‡(ํ…Œ์ด๋ธ”)์„ ๋งŒ๋“ค์–ด์•ผ๊ฒ ์ฃ ?
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” SQL์—์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ(CREATE)ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ,
์ œ์•ฝ ์กฐ๊ฑด(Constraint)์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

๐Ÿ“‹ CREATE TABLE

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… CREATE TABLE ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

CREATE TABLE ํ…Œ์ด๋ธ”๋ช… (
  ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… [์ œ์•ฝ์กฐ๊ฑด],
  ...
);

๐Ÿ“Œ ์˜ˆ์‹œ:

CREATE TABLE Customer (
  custid    INT      PRIMARY KEY,
  name      VARCHAR(30) NOT NULL,
  address   VARCHAR(100),
  phone     CHAR(11) UNIQUE
);
  • custid๋Š” ๊ธฐ๋ณธํ‚ค (์ค‘๋ณต โŒ, NULL โŒ)

  • name์€ ๋ฐ˜๋“œ์‹œ ๊ฐ’์ด ์žˆ์–ด์•ผ ํ•จ

  • phone์€ ์ค‘๋ณต ๋ถˆ๊ฐ€


๐Ÿงฑ ์ž์ฃผ ์“ฐ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…

ํƒ€์ž…

์„ค๋ช…

INT

์ •์ˆ˜ํ˜•

VARCHAR(n)

๊ฐ€๋ณ€ ๊ธธ์ด ๋ฌธ์ž์—ด (์ตœ๋Œ€ n์ž)

CHAR(n)

๊ณ ์ • ๊ธธ์ด ๋ฌธ์ž์—ด

DATE

๋‚ ์งœ (ํ˜•์‹: YYYY-MM-DD)

FLOAT, DOUBLE

์‹ค์ˆ˜ํ˜• ์ˆซ์ž


๐Ÿ” ์ œ์•ฝ ์กฐ๊ฑด(CONSTRAINT)

SQL์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ๊ผญ ํ•„์š”ํ•œ ๊ฒŒ ๋ฐ”๋กœ ์ œ์•ฝ ์กฐ๊ฑด์ด์—์š”.
ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค ๋•Œ ์ปฌ๋Ÿผ์— ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€, ๋˜๋Š” ์–ด๋–ค ๊ฐ’์€ ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ œํ•œํ•ด์ค๋‹ˆ๋‹ค.

โœ… ์ œ์•ฝ ์กฐ๊ฑด์ด๋ž€?

ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๊ทœ์น™์„ ์„ค์ •ํ•ด์„œ
์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์žฅ์น˜์˜ˆ์š”.

์ œ์•ฝ ์กฐ๊ฑด

์„ค๋ช…

PRIMARY KEY

ํ…Œ์ด๋ธ”์˜ ๊ณ ์œ  ์‹๋ณ„์ž (์ค‘๋ณต โŒ, NULL โŒ)

NOT NULL

๋ฐ˜๋“œ์‹œ ๊ฐ’์ด ์žˆ์–ด์•ผ ํ•จ

UNIQUE

์ค‘๋ณต ๋ถˆ๊ฐ€ (๋‹จ, NULL์€ ์—ฌ๋Ÿฌ ๋ฒˆ ํ—ˆ์šฉ๋จ)

DEFAULT

๊ฐ’์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด ์ž๋™ ์ž…๋ ฅ๋จ

CHECK

์กฐ๊ฑด์‹์„ ๋งŒ์กฑํ•ด์•ผ ํ•จ (CHECK(age >= 18) ๋“ฑ)

FOREIGN KEY

๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํ‚ค๋ฅผ ์ฐธ์กฐ (์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€)


๐Ÿ“‹ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด ์˜ˆ์‹œ ํ…Œ์ด๋ธ”

์ œ์•ฝ ์กฐ๊ฑด

์ปฌ๋Ÿผ ์ •์˜ ์˜ˆ์‹œ

์˜๋ฏธ / ์„ค๋ช…

PRIMARY KEY

custid INT PRIMARY KEY

๊ธฐ๋ณธ ํ‚ค๋กœ ์ง€์ •. ์ค‘๋ณต โŒ, NULL โŒ

NOT NULL

name VARCHAR(50) NOT NULL

๋ฐ˜๋“œ์‹œ ๊ฐ’์ด ์žˆ์–ด์•ผ ํ•จ

UNIQUE

email VARCHAR(100) UNIQUE

์ค‘๋ณต๋œ ๊ฐ’ ํ—ˆ์šฉ โŒ. ๋‹จ, NULL์€ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€๋Šฅ

DEFAULT

reg_date DATE DEFAULT CURRENT_DATE

์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ๋‚ ์งœ๊ฐ€ ์ž๋™ ์ž…๋ ฅ

CHECK

age INT CHECK (age >= 18)

๊ฐ’์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ์ €์žฅ ๊ฐ€๋Šฅ

FOREIGN KEY

deptid INT, FOREIGN KEY (deptid) REFERENCES Department(deptid)

์™ธ๋ž˜ ํ‚ค. ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๊ฐ’๋งŒ ์ฐธ์กฐ ๊ฐ€๋Šฅ


๐Ÿงช ์‹ค์ „ ์˜ˆ์ œ: ํšŒ์› ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ

CREATE TABLE Member (
  id        INT PRIMARY KEY,
  name      VARCHAR(50) NOT NULL,
  age       INT CHECK (age >= 18),
  email     VARCHAR(100) UNIQUE,
  join_date DATE DEFAULT CURRENT_DATE,
  deptid    INT,
  FOREIGN KEY (deptid) REFERENCES Department(deptid)
);

โœ๏ธ ํ…Œ์ด๋ธ” ์‚ญ์ œ์™€ ์ˆ˜์ •

๐Ÿ”ป ํ…Œ์ด๋ธ” ์‚ญ์ œ

DROP TABLE ํ…Œ์ด๋ธ”๋ช…;

๐Ÿ”ง ํ…Œ์ด๋ธ” ์ˆ˜์ •

ALTER TABLE ํ…Œ์ด๋ธ”๋ช…
ADD ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž…;

ALTER TABLE ํ…Œ์ด๋ธ”๋ช…
MODIFY ์ปฌ๋Ÿผ๋ช… ์ƒˆ_๋ฐ์ดํ„ฐํƒ€์ž…;

ALTER TABLE ํ…Œ์ด๋ธ”๋ช…
DROP COLUMN ์ปฌ๋Ÿผ๋ช…;

๐Ÿง  ๋งˆ๋ฌด๋ฆฌ

๊ตฌ๋ถ„

ํ•ต์‹ฌ ๋‚ด์šฉ

CREATE TABLE

ํ…Œ์ด๋ธ”์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด

๋ฐ์ดํ„ฐ ํƒ€์ž…

INT, VARCHAR(n), CHAR(n), DATE, FLOAT ๋“ฑ

์ฃผ์š” ์ œ์•ฝ ์กฐ๊ฑด

PRIMARY KEY, NOT NULL, UNIQUE, DEFAULT, CHECK, FOREIGN KEY

์ œ์•ฝ ์กฐ๊ฑด ์—ญํ• 

๊ฐ’์˜ ์ค‘๋ณต ๋ฐฉ์ง€, ํ•„์ˆ˜ ๊ฐ’ ์ž…๋ ฅ, ๊ธฐ๋ณธ๊ฐ’ ์ง€์ •, ์กฐ๊ฑด ๋งŒ์กฑ ์—ฌ๋ถ€ ํ™•์ธ, ์ฐธ์กฐ ๊ด€๊ณ„ ์„ค์ •

์ œ์•ฝ ์กฐ๊ฑด ์˜ˆ์‹œ

age INT CHECK (age >= 18), email VARCHAR UNIQUE, FOREIGN KEY (id) REFERENCES ...

ํ…Œ์ด๋ธ” ์ˆ˜์ •

ALTER TABLE๋กœ ์ปฌ๋Ÿผ ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ ๊ฐ€๋Šฅ

ํ…Œ์ด๋ธ” ์‚ญ์ œ

DROP TABLE ํ…Œ์ด๋ธ”๋ช…;

์‹ค์ „ ์˜ˆ์‹œ ํ…Œ์ด๋ธ”

Member ํ…Œ์ด๋ธ”: ๋‹ค์–‘ํ•œ ์ œ์•ฝ์กฐ๊ฑด ํฌํ•จ

์‚ฌ์šฉ ํŒ

์™ธ๋ž˜ ํ‚ค๋Š” JOIN๊ณผ ํ•จ๊ป˜ ์ž์ฃผ ์‚ฌ์šฉ, CHECK๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์กฐ๊ฑด์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉ๋จ

๐Ÿ“˜ ํ•™์Šต ํŒ
โ€ข ๊ธฐ๋ณธ ํ‚ค๋Š” NOT NULL + UNIQUE์˜ ์กฐํ•ฉ์ด๊ธฐ๋„ ํ•ด์š”.
โ€ข ์™ธ๋ž˜ ํ‚ค๋Š” JOIN๊ณผ ํ•จ๊ป˜ ์ž์ฃผ ์“ฐ์ด๋‹ˆ ํ™•์‹คํžˆ ์ตํ˜€๋‘์„ธ์š”!
โ€ข CHECK๋Š” ์„ฑ๋ณ„ IN ('M', 'F') ๊ฐ™์€ ์กฐ๊ฑด์—๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.







- ์ปฌ๋ ‰์…˜ ์•„ํ‹ฐํด