• Feed
  • Explore
  • Ranking
/
/
    ๐Ÿ’พ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

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

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







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