[DATABASE] DDL

์„ฑ์žฅ์ผ๊ธฐยท2024๋…„ 7์›” 2์ผ

[SWCAMP] DB

๋ชฉ๋ก ๋ณด๊ธฐ
6/14

DDL(Data Definition Language)

๐Ÿ’ก DDL(Data Definition Language)๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” SQL์˜ ํ•œ ๋ถ€๋ถ„์ด๋‹ค.

์Šคํ‚ค๋งˆ(schema)
: ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ(์ปฌ๋Ÿผ๋ช…, ์ž๋ฃŒํ˜•, ์ž๋ฃŒํ˜• ํฌ๊ธฐ, ํ…Œ์ด๋ธ”๋ช… ๋“ฑ) ๋ฐ ์ œ์•ฝ์กฐ๊ฑด(unique, primary key, not null, check, foreign key ๋“ฑ) ์ „๋ฐ˜์„ ์•„์šธ๋Ÿฌ ์ง€์นญํ•˜๋Š” ๋ง

CREATE

  • ํ…Œ์ด๋ธ” ์ƒ์„ฑ์„ ์œ„ํ•œ ๊ตฌ๋ฌธ

  • IF NOT EXISTS๋ฅผ ์ ์šฉํ•˜๋ฉด ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์ด๋ผ๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์„ค์ • ๋ฐฉ๋ฒ•

    • column_name data_type(length) [NOT NULL][DEFAULT value] [AUTO_INCREMENT] column_constraint
  • tb1 ํ…Œ์ด๋ธ” ์ƒ์„ฑ

    CREATE TABLE IF NOT EXISTS tb1 (
        pk INT PRIMARY KEY, -- ์ปฌ๋Ÿผ ๋ ˆ๋ฒจ์—์„œ  ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€
        fk INT,
        col1 VARCHAR(255),
        CHECK(col1 IN ('Y', 'N')) -- ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ์—์„œ ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€
    ) ENGINE=INNODB;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ํ™•์ธ

    DESCRIBE tb1;
    
    -- ์ค„์—ฌ์„œ ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค.
    DESC tb1;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • INSERT ํ…Œ์ŠคํŠธ

    INSERT INTO tb1 VALUES (1, 10, 'Y');
    
    SELECT * FROM tb1;

    ์‹คํ–‰๊ฒฐ๊ณผ

AUTO_INCREMENT

  • INSERT ์‹œ PRIMARYํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ์ปฌ๋Ÿผ์— ์ž๋™์œผ๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋ฐœ์ƒ(์ค‘๋ณต๋˜์ง€ ์•Š๊ฒŒ)์‹œ์ผœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • tb2 ํ…Œ์ด๋ธ” ์ƒ์„ฑ

    CREATE TABLE IF NOT EXISTS tb2 (
        pk INT AUTO_INCREMENT PRIMARY KEY,
        fk INT,
        col1 VARCHAR(255),
        CHECK(col1 IN ('Y', 'N'))
    ) ENGINE=INNODB;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • INSERT ํ…Œ์ŠคํŠธ

    INSERT INTO tb2 VALUES (null, 10, 'Y');
    INSERT INTO tb2 VALUES (null, 20, 'Y');
    
    SELECT * FROM tb2;

    ์‹คํ–‰๊ฒฐ๊ณผ

ALTER

  • ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€/๋ณ€๊ฒฝ/์ˆ˜์ •/์‚ญ์ œํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์€ ALTER ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์ ์šฉํ•œ๋‹ค.
  • ์ข…๋ฅ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๊ณ  ๋ณต์žกํ•˜๋ฏ€๋กœ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ๋งŒ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.

์—ด ์ถ”๊ฐ€

  • ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD ์ปฌ๋Ÿผ๋ช… ์ปฌ๋Ÿผ์ •์˜
  • col2 ์ปฌ๋Ÿผ ์ถ”๊ฐ€(INTํ˜•, NOT NULL ์ œ์•ฝ์กฐ๊ฑด ์กด์žฌ)
    ALTER TABLE tb2
    ADD col2 INT NOT NULL;
    
    DESCRIBE tb2;

    ์‹คํ–‰๊ฒฐ๊ณผ

์—ด ์‚ญ์ œ

  • ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP COLUMN ์ปฌ๋Ÿผ๋ช…
  • col2 ์ปฌ๋Ÿผ ์‚ญ์ œ
    ALTER TABLE tb2
    DROP COLUMN col2;
    
    DESCRIBE tb2;

    ์‹คํ–‰๊ฒฐ๊ณผ

์—ด ์ด๋ฆ„ ๋ฐ ๋ฐ์ดํ„ฐ ํ˜•์‹ ๋ณ€๊ฒฝ

  • ALTER TABLE ํ…Œ์ด๋ธ”๋ช… CHANGE COLUMN ๊ธฐ์กด์ปฌ๋Ÿผ๋ช… ๋ฐ”๊ฟ€ ์ปฌ๋Ÿผ๋ช… ์ปฌ๋Ÿผ์ •์˜
  • fk ์ปฌ๋Ÿผ์„ change_fk ์ปฌ๋Ÿผ์œผ๋กœ ๋ณ€๊ฒฝ(NOT NULL ์ œ์•ฝ์กฐ๊ฑด ์กด์žฌ)
    ALTER TABLE tb2
    CHANGE COLUMN fk change_fk INT NOT NULL;
    
    DESCRIBE tb2;

    ์‹คํ–‰๊ฒฐ๊ณผ

์—ด ์ œ์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ

  • ALTER TABLE ํ…Œ์ด๋ธ”๋ช… drop ์ œ์•ฝ์กฐ๊ฑด

  • tb2 ํ…Œ์ด๋ธ”์˜ PRIMARY KEY ์ œ์•ฝ์กฐ๊ฑด ์ œ๊ฑฐ

    ALTER TABLE tb2
    DROP PRIMARY KEY;    -- ์—๋Ÿฌ ๋ฐœ์ƒ

    ์‹คํ–‰๊ฒฐ๊ณผ

  • AUTO_INCREMENT๊ฐ€ ๊ฑธ๋ ค ์žˆ๋Š” ์ปฌ๋Ÿผ์€ PRIMARY KEY ์ œ๊ฑฐ๊ฐ€ ์•ˆ๋˜๋ฏ€๋กœ AUTO_INCREMENT๋ฅผ MODIFY ๋ช…๋ น์–ด๋กœ ์ œ๊ฑฐํ•œ๋‹ค.(MODIFY๋Š” ์ปฌ๋Ÿผ์˜ ์ •์˜๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค.)

    ALTER TABLE tb2
    MODIFY pk INT;
    
    DESCRIBE tb2;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • ์ด์ œ ๋‹ค์‹œ PRIMARY KEY ์ œ์•ฝ์กฐ๊ฑด ์ œ๊ฑฐ

    ALTER TABLE tb2
    DROP PRIMARY KEY;
    
    DESCRIBE tb2;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • tb2 ํ…Œ์ด๋ธ”์˜ pk ์ปฌ๋Ÿผ์— ๋‹ค์‹œ PRIMARY KEY ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ํ•˜๊ธฐ

    ALTER TABLE tb2
    ADD PRIMARY KEY(pk);
    
    DESCRIBE tb2;

    ์‹คํ–‰๊ฒฐ๊ณผ

์ปฌ๋Ÿผ ์—ฌ๋Ÿฌ๊ฐœ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
    ALTER TABLE tb2
    ADD col3 DATE NOT NULL,			
    ADD col4 TINYINT NOT NULL; 
    
    DESC tb2;

    ์‹คํ–‰๊ฒฐ๊ณผ

DROP

  • ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ๋ฌธ

  • tb3 ํ…Œ์ด๋ธ” ์ƒ์„ฑ ํ›„ ์‚ญ์ œ

    -- tb3 ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    CREATE TABLE IF NOT EXISTS tb3 (
      pk INT AUTO_INCREMENT PRIMARY KEY,
      fk INT,
      col1 VARCHAR(255),
      CHECK(col1 IN ('Y', 'N'))
    ) ENGINE=INNODB;
    
    -- tb3 ํ…Œ์ด๋ธ” ์‚ญ์ œ
    DROP TABLE IF EXISTS tb3;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ” ์ƒ์„ฑ(tb4, tb5) ํ›„ ํ•œ๋ฒˆ์— ์‚ญ์ œ

    -- tb4 ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    CREATE TABLE IF NOT EXISTS tb4 (
      pk INT AUTO_INCREMENT PRIMARY KEY,
      fk INT,
      col1 VARCHAR(255),
      CHECK(col1 IN ('Y', 'N'))
    ) ENGINE=INNODB;
    
    -- tb5 ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    CREATE TABLE IF NOT EXISTS tb5 (
      pk INT AUTO_INCREMENT PRIMARY KEY,
      fk INT,
      col1 VARCHAR(255),
      CHECK(col1 IN ('Y', 'N'))
    ) ENGINE=INNODB;
    
    -- ํ•œ๋ฒˆ์— 2๊ฐœ์˜ ํ…Œ์ด๋ธ” ์‚ญ์ œ
    DROP TABLE IF EXISTS tb4, tb5;

    ์‹คํ–‰๊ฒฐ๊ณผ

TRUNCATE

  • ๋…ผ๋ฆฌ์ ์œผ๋กœ๋Š” WHERE์ ˆ์ด ์—†๋Š” DELETE ๊ตฌ๋ฌธ๊ณผ ํฐ ์ฐจ์ด๊ฐ€ ์—†์–ด ๋ณด์ธ๋‹ค.
  • ํ•˜์ง€๋งŒ ์–ด์ฐจํ”ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ์‚ญ์ œํ•  ๊ฒฝ์šฐ ํ–‰๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ง€์›Œ์ง€๋Š” DELETE๋ณด๋‹ค DROP์ดํ›„ ๋ฐ”๋กœ ํ…Œ์ด๋ธ”์„ ์žฌ์ƒ์„ฑ ํ•ด์ฃผ๋Š” TRUNCATE๊ฐ€ ํ›จ์”ฌ ํšจ์œจ์ ์œผ๋กœ ํ•œ๋ฒˆ์— ํ…Œ์ด๋ธ”์„ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ค€๋‹ค.
  • ๋˜ํ•œ AUTO_INCREMENT ์ปฌ๋Ÿผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‹œ์ž‘ ๊ฐ’๋„ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋œ๋‹ค.
    -- tb6 ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    CREATE TABLE IF NOT EXISTS tb6 (
      pk INT AUTO_INCREMENT PRIMARY KEY,
      fk INT,
      col1 VARCHAR(255),
      CHECK(col1 IN ('Y', 'N'))
    ) ENGINE=INNODB;
    
    -- 4๊ฐœ ํ–‰ ๋ฐ์ดํ„ฐ INSERT
    INSERT INTO tb6 VALUES (null, 10, 'Y');
    INSERT INTO tb6 VALUES (null, 20, 'Y');
    INSERT INTO tb6 VALUES (null, 30, 'Y');
    INSERT INTO tb6 VALUES (null, 40, 'Y');
    
    -- ์ œ๋Œ€๋กœ INSERT ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
    SELECT * FROM tb6;
    
    -- ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ
    -- TRUNCATE TABLE tb6;
    TRUNCATE tb6;    -- TABLE ํ‚ค์›Œ๋“œ ์ƒ๋žต ๊ฐ€๋Šฅ

    ์‹คํ–‰๊ฒฐ๊ณผ

CONSTRAINTS

๐Ÿ’ก CONSTRAINT๋Š” ์ œ์•ฝ์กฐ๊ฑด์œผ๋กœ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜๊ฑฐ๋‚˜ ์ˆ˜์ •๋  ๋•Œ์˜ ๊ทœ์น™์„ ์ •์˜ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค.

NOT NULL

  • NULL๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ œ์•ฝ์กฐ๊ฑด

  • ์ œ์•ฝ์กฐ๊ฑด ํ™•์ธ์šฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ INSERT ํ›„ ์กฐํšŒํ•˜๊ธฐ

    DROP TABLE IF EXISTS user_notnull;
    CREATE TABLE IF NOT EXISTS user_notnull (
        user_no INT NOT NULL,
        user_id VARCHAR(255) NOT NULL,
        user_pwd VARCHAR(255) NOT NULL,
        user_name VARCHAR(255) NOT NULL,
        gender VARCHAR(3),
        phone VARCHAR(255) NOT NULL,
        email VARCHAR(255)
    ) ENGINE=INNODB;
    
    INSERT 
      INTO user_notnull
    (user_no, user_id, user_pwd, user_name, gender, phone, email)
    VALUES
    (1, 'user01', 'pass01', 'ํ™๊ธธ๋™', '๋‚จ', '010-1234-5678', 'hong123@gmail.com'),
    (2, 'user02', 'pass02', '์œ ๊ด€์ˆœ', '์—ฌ', '010-777-7777', 'yu77@gmail.com');
    
    SELECT * FROM user_notnull;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • not null ์ œ์•ฝ์กฐ๊ฑด ์—๋Ÿฌ ๋ฐœ์ƒ(null ๊ฐ’ ์ ์šฉ)

    INSERT
      INTO user_notnull
    (user_no, user_id, user_pwd, user_name, gender, phone, email)
    VALUES
    (3, 'user03', null, '์ด์ˆœ์‹ ', '๋‚จ', '010-222-2222', 'lee222@gmail.com');

    ์‹คํ–‰๊ฒฐ๊ณผ

UNIQUE

  • ์ค‘๋ณต๊ฐ’ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ œ์•ฝ์กฐ๊ฑด

  • ์ œ์•ฝ์กฐ๊ฑด ํ™•์ธ์šฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ INSERT ํ›„ ์กฐํšŒํ•˜๊ธฐ

    DROP TABLE IF EXISTS user_unique;
    CREATE TABLE IF NOT EXISTS user_unique (
        user_no INT NOT NULL UNIQUE,
        user_id VARCHAR(255) NOT NULL,
        user_pwd VARCHAR(255) NOT NULL,
        user_name VARCHAR(255) NOT NULL,
        gender VARCHAR(3),
        phone VARCHAR(255) NOT NULL,
        email VARCHAR(255),
        UNIQUE (phone)
    ) ENGINE=INNODB;
    
    INSERT
      INTO user_unique
    (user_no, user_id, user_pwd, user_name, gender, phone, email)
    VALUES
    (1, 'user01', 'pass01', 'ํ™๊ธธ๋™', '๋‚จ', '010-1234-5678', 'hong123@gmail.com'),
    (2, 'user02', 'pass02', '์œ ๊ด€์ˆœ', '์—ฌ', '010-777-7777', 'yu77@gmail.com');
    
    SELECT * FROM user_unique;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • unique ์ œ์•ฝ์กฐ๊ฑด ์—๋Ÿฌ ๋ฐœ์ƒ(์ „ํ™”๋ฒˆํ˜ธ ์ค‘๋ณต๊ฐ’ ์ ์šฉ)

    INSERT 
      INTO user_unique
    (user_no, user_id, user_pwd, user_name, gender, phone, email)
    VALUES
    (3, 'user03', 'pass03', '์ด์ˆœ์‹ ', '๋‚จ', '010-777-7777', 'lee222@gmail.com');

    ์‹คํ–‰๊ฒฐ๊ณผ

PRIMARY KEY

  • ํ…Œ์ด๋ธ”์—์„œ ํ•œ ํ–‰์˜ ์ •๋ณด๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ํ•  ์ปฌ๋Ÿผ์„ ์˜๋ฏธํ•œ๋‹ค.

  • ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์‹๋ณ„์ž ์—ญํ• ์„ ํ•œ๋‹ค.(ํ•œ ํ–‰์”ฉ ๊ตฌ๋ถ„ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.)

  • NOT NULL + UNIQUE ์ œ์•ฝ์กฐ๊ฑด์˜ ์˜๋ฏธ

  • ํ•œ ํ…Œ์ด๋ธ”๋‹น ํ•œ ๊ฐœ๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ

  • ์ปฌ๋Ÿผ ๋ ˆ๋ฒจ, ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ ๋‘˜ ๋‹ค ์„ค์ • ๊ฐ€๋Šฅํ•จ

  • ํ•œ ๊ฐœ ์ปฌ๋Ÿผ์— ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๋ฌถ์–ด์„œ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Œ(๋ณตํ•ฉํ‚ค)(ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ ์„ค์ •๋งŒ ๊ฐ€๋Šฅํ•จ)

  • ์ œ์•ฝ์กฐ๊ฑด ํ™•์ธ์šฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ INSERT ํ›„ ์กฐํšŒํ•˜๊ธฐ

    DROP TABLE IF EXISTS user_primarykey;
    CREATE TABLE IF NOT EXISTS user_primarykey (
    --     user_no INT PRIMARY KEY,
        user_no INT,
        user_id VARCHAR(255) NOT NULL,
        user_pwd VARCHAR(255) NOT NULL,
        user_name VARCHAR(255) NOT NULL,
        gender VARCHAR(3),
        phone VARCHAR(255) NOT NULL,
        email VARCHAR(255),
        PRIMARY KEY (user_no)
    ) ENGINE=INNODB;
    
    INSERT 
      INTO user_primarykey
    (user_no, user_id, user_pwd, user_name, gender, phone, email)
    VALUES
    (1, 'user01', 'pass01', 'ํ™๊ธธ๋™', '๋‚จ', '010-1234-5678', 'hong123@gmail.com'),
    (2, 'user02', 'pass02', '์œ ๊ด€์ˆœ', '์—ฌ', '010-777-7777', 'yu77@gmail.com');
    
    SELECT * FROM user_primarykey;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • primary key ์ œ์•ฝ์กฐ๊ฑด ์—๋Ÿฌ ๋ฐœ์ƒ(null๊ฐ’ ์ ์šฉ)

    INSERT 
      INTO user_primarykey
    (user_no, user_id, user_pwd, user_name, gender, phone, email)
    VALUES
    (null, 'user03', 'pass03', '์ด์ˆœ์‹ ', '๋‚จ', '010-777-7777', 'lee222@gmail.com');

    ์‹คํ–‰๊ฒฐ๊ณผ

  • primary key ์ œ์•ฝ์กฐ๊ฑด ์—๋Ÿฌ ๋ฐœ์ƒ(์ค‘๋ณต๊ฐ’ ์ ์šฉ)

    INSERT 
      INTO user_primarykey
    (user_no, user_id, user_pwd, user_name, gender, phone, email)
    VALUES
    (2, 'user03', 'pass03', '์ด์ˆœ์‹ ', '๋‚จ', '010-777-7777', 'lee222@gmail.com');

    ์‹คํ–‰๊ฒฐ๊ณผ

FOREIGN KEY

  • ์‚ญ์ œ๋ฃฐ ๊ด€๋ จ ๋งํฌ

    Foreign Keys

  • ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„๋ฐฐํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

  • ์ฐธ์กฐ(REFERENCES)๋œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ’๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

  • FOREIGN KEY ์ œ์•ฝ์กฐ๊ฑด์— ์˜ํ•ด์„œ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„(RELATIONSHIP)๊ฐ€ ํ˜•์„ฑ ๋จ

  • ์ œ๊ณต๋˜๋Š” ๊ฐ’ ์™ธ์—๋Š” NULL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

  • ์ œ์•ฝ์กฐ๊ฑด ํ™•์ธ์šฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ INSERT ํ›„ ์กฐํšŒํ•˜๊ธฐ(๋ถ€๋ชจ ํ…Œ์ด๋ธ”)

    DROP TABLE IF EXISTS user_grade;
    CREATE TABLE IF NOT EXISTS user_grade (
        grade_code INT NOT NULL UNIQUE,
        grade_name VARCHAR(255) NOT NULL
    ) ENGINE=INNODB;
    
    INSERT 
      INTO user_grade
    VALUES 
    (10, '์ผ๋ฐ˜ํšŒ์›'),
    (20, '์šฐ์ˆ˜ํšŒ์›'),
    (30, 'ํŠน๋ณ„ํšŒ์›');
    
    SELECT * FROM user_grade;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • ์ œ์•ฝ์กฐ๊ฑด ํ™•์ธ์šฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ INSERT ํ›„ ์กฐํšŒํ•˜๊ธฐ2
    (์ž์‹ ํ…Œ์ด๋ธ” - DELETE ์‚ญ์ œ๋ฃฐ ์—†์„ ์‹œ )

    DROP TABLE IF EXISTS user_foreignkey1;
    CREATE TABLE IF NOT EXISTS user_foreignkey1 (
        user_no INT PRIMARY KEY,
        user_id VARCHAR(255) NOT NULL,
        user_pwd VARCHAR(255) NOT NULL,
        user_name VARCHAR(255) NOT NULL,
        gender VARCHAR(3),
        phone VARCHAR(255) NOT NULL,
        email VARCHAR(255),
        grade_code INT ,
        FOREIGN KEY (grade_code) 
    		REFERENCES user_grade (grade_code)
    ) ENGINE=INNODB;
    
    INSERT 
      INTO user_foreignkey1
    (user_no, user_id, user_pwd, user_name, gender, phone, email, grade_code)
    VALUES
    (1, 'user01', 'pass01', 'ํ™๊ธธ๋™', '๋‚จ', '010-1234-5678', 'hong123@gmail.com', 10),
    (2, 'user02', 'pass02', '์œ ๊ด€์ˆœ', '์—ฌ', '010-777-7777', 'yu77@gmail.com', 20);
    
    SELECT * FROM user_foreignkey1;
    

    ์‹คํ–‰๊ฒฐ๊ณผ

  • foreign key ์ œ์•ฝ์กฐ๊ฑด ์—๋Ÿฌ ๋ฐœ์ƒ(์ฐธ์กฐ ์ปฌ๋Ÿผ์— ์—†๋Š” ๊ฐ’ ์ ์šฉ)

    INSERT 
      INTO user_foreignkey1
    (user_no, user_id, user_pwd, user_name, gender, phone, email, grade_code)
    VALUES
    (3, 'user03', 'pass03', '์ด์ˆœ์‹ ', '๋‚จ', '010-777-7777', 'lee222@gmail.com', 50);

    ์‹คํ–‰๊ฒฐ๊ณผ

  • ์ œ์•ฝ์กฐ๊ฑด ํ™•์ธ์šฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ INSERT ํ›„ ์กฐํšŒํ•˜๊ธฐ3
    (์ž์‹ ํ…Œ์ด๋ธ” - DELETE ์‚ญ์ œ๋ฃฐ ์žˆ์„ ์‹œ )

    DROP TABLE IF EXISTS user_foreignkey2;
    CREATE TABLE IF NOT EXISTS user_foreignkey2 (
        user_no INT PRIMARY KEY,
        user_id VARCHAR(255) NOT NULL,
        user_pwd VARCHAR(255) NOT NULL,
        user_name VARCHAR(255) NOT NULL,
        gender VARCHAR(3),
        phone VARCHAR(255) NOT NULL,
        email VARCHAR(255),
        grade_code INT ,
        FOREIGN KEY (grade_code) 
    		REFERENCES user_grade (grade_code)
            ON UPDATE SET NULL
            ON DELETE SET NULL
    ) ENGINE=INNODB;
    
    INSERT 
      INTO user_foreignkey2
    (user_no, user_id, user_pwd, user_name, gender, phone, email, grade_code)
    VALUES
    (1, 'user01', 'pass01', 'ํ™๊ธธ๋™', '๋‚จ', '010-1234-5678', 'hong123@gmail.com', 10),
    (2, 'user02', 'pass02', '์œ ๊ด€์ˆœ', '์—ฌ', '010-777-7777', 'yu77@gmail.com', 20);
    
    SELECT * FROM user_foreignkey2;
    

    ์‹คํ–‰๊ฒฐ๊ณผ

  • 1) ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ grade_code ์ˆ˜์ •
    (user_foreignkey1 ํ…Œ์ด๋ธ” DROPํ•˜๊ณ  ์ง„ํ–‰ํ•  ๊ฒƒ(user_foreignkey์—๋Š” foreign key ์ œ์•ฝ์กฐ๊ฑด์— ์ˆ˜์ • ๋ฐ ์‚ญ์ œ๋ฃฐ ์ ์šฉ์ด ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ)

    DROP TABLE IF EXISTS user_foreignkey1;
    
    UPDATE user_grade
       SET grade_code = null
     WHERE grade_code = 10;
    
    -- ์ž์‹ ํ…Œ์ด๋ธ”์˜ grade_code๊ฐ€ 10์ด ์—ˆ๋˜ ํšŒ์›์˜ grade_code๊ฐ’์ด NULL์ด ๋œ ๊ฒƒ์„ ํ™•์ธ
    SELECT * FROM user_foreignkey2;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • 2) ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ํ–‰ ์‚ญ์ œ
    (user_foreignkey1 ํ…Œ์ด๋ธ” DROPํ•˜๊ณ  ์ง„ํ–‰ํ•  ๊ฒƒ(user_foreignkey์—๋Š” foreign key ์ œ์•ฝ์กฐ๊ฑด์— ์ˆ˜์ • ๋ฐ ์‚ญ์ œ๋ฃฐ ์ ์šฉ์ด ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ)

    DELETE 
      FROM user_grade
     WHERE grade_code = 20;
    
    -- ์ž์‹ ํ…Œ์ด๋ธ”์˜ grade_code๊ฐ€ 20์ด ์—ˆ๋˜ ํšŒ์›์˜ grade_code๊ฐ’์ด NULL์ด ๋œ ๊ฒƒ์„ ํ™•์ธ
    SELECT * FROM user_foreignkey2;

    ์‹คํ–‰๊ฒฐ๊ณผ

1-5. CHECK

  • check ์ œ์•ฝ ์กฐ๊ฑด ์œ„๋ฐ˜์‹œ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ œ์•ฝ์กฐ๊ฑด

  • ์ œ์•ฝ์กฐ๊ฑด ํ™•์ธ์šฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ INSERT ํ›„ ์กฐํšŒํ•˜๊ธฐ

    DROP TABLE IF EXISTS user_check;
    CREATE TABLE IF NOT EXISTS user_check (
        user_no INT AUTO_INCREMENT PRIMARY KEY,
        user_name VARCHAR(255) NOT NULL,
        gender VARCHAR(3) CHECK(gender IN ('๋‚จ','์—ฌ')),
        age INT CHECK(age >= 19)
    ) ENGINE=INNODB;
    
    INSERT 
      INTO user_check
    VALUES 
    (null, 'ํ™๊ธธ๋™', '๋‚จ', 25),
    (null, '์ด์ˆœ์‹ ', '๋‚จ', 33);
    
    SELECT * FROM user_check;

    ์‹คํ–‰๊ฒฐ๊ณผ

    Untitled

  • gender ์ปฌ๋Ÿผ์˜ CHECK ์ œ์•ฝ ์กฐ๊ฑด ์—๋Ÿฌ ๋ฐœ์ƒ(์„ฑ๋ณ„์ด ๋‘ ๊ธ€์ž)

    INSERT 
      INTO user_check
    VALUES (null, '์•ˆ์ค‘๊ทผ', '๋‚จ์„ฑ', 27);

    ์‹คํ–‰๊ฒฐ๊ณผ

    Untitled

  • age ์ปฌ๋Ÿผ์˜ CHECK ์ œ์•ฝ ์กฐ๊ฑด ์—๋Ÿฌ ๋ฐœ์ƒ(๋‚˜์ด๊ฐ€ 19์„ธ ๋ฏธ๋งŒ)

    INSERT 
      INTO user_check
    VALUES (null, '์œ ๊ด€์ˆœ', '์—ฌ', 17);

    ์‹คํ–‰๊ฒฐ๊ณผ

    Untitled

DEFAULT

  • ์ปฌ๋Ÿผ์— null ๋Œ€์‹  ๊ธฐ๋ณธ ๊ฐ’ ์ ์šฉ

  • ์ปฌ๋Ÿผ ํƒ€์ž…์ด DATE์ผ ์‹œ current_date๋งŒ ๊ฐ€๋Šฅ

  • ์ปฌ๋Ÿผ ํƒ€์ž…์ด DATETIME์ผ ์‹œ current_time๊ณผ current_timestamp, now() ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ์ œ์•ฝ์กฐ๊ฑด ํ™•์ธ์šฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ INSERT ํ›„ ์กฐํšŒํ•˜๊ธฐ

    DROP TABLE IF EXISTS tbl_country;
    CREATE TABLE IF NOT EXISTS tbl_country (
        country_code INT AUTO_INCREMENT PRIMARY KEY,
        country_name VARCHAR(255) DEFAULT 'ํ•œ๊ตญ',
        population VARCHAR(255) DEFAULT '0๋ช…',
        ****add_day DATE DEFAULT (current_date),
        add_time DATETIME DEFAULT (current_time)
    ) ENGINE=INNODB;
    
    SELECT * FROM tbl_country;

    ์‹คํ–‰๊ฒฐ๊ณผ

  • default ์„ค์ •์ด ๋˜์–ด ์žˆ๋Š” ์ปฌ๋Ÿผ๋“ค์— default ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋„๋ก INSERT ์ง„ํ–‰ ํ›„ ์กฐํšŒ

    INSERT 
      INTO tbl_country
    VALUES (null, default, default, default, default);
    
    SELECT * FROM tbl_country;

    ์‹คํ–‰๊ฒฐ๊ณผ

profile
์—”์ง€๋‹ˆ์–ด๋กœ์˜ ์„ฑ์žฅ์ผ์ง€

0๊ฐœ์˜ ๋Œ“๊ธ€