[DB][MySQL][๊ฐœ๋…] ๐Ÿ“š DB ์ดˆ๊ณ ์ˆ˜์˜ ๊ธธ! ์ธ๋ฑ์Šค๋ถ€ํ„ฐ VIEW๊นŒ์ง€ ํ•œ ๋ฐฉ์— ๋งˆ์Šคํ„ฐํ•˜๊ธฐ! ๐Ÿ’ฅ

๊น€์ƒ์šฑยท2024๋…„ 9์›” 12์ผ
0
post-thumbnail

๐Ÿ’พ DDL (Data Definition Language)

DDL์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ์ฒด์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ…Œ์ด๋ธ”, ๋ทฐ, ์ธ๋ฑ์Šค ๋“ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ› ๏ธ

๐Ÿ”‘ ์ฃผ์š” ๋ช…๋ น์–ด

  • CREATE: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์ƒ์„ฑ
  • ALTER: ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์ˆ˜์ •
  • DROP: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์‚ญ์ œ
  • RENAME: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด์˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ
  • TRUNCATE: ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ๋ฐ ์ดˆ๊ธฐํ™”

๐Ÿ’ก ์˜ˆ์‹œ ์ฝ”๋“œ

-- ํ…Œ์ด๋ธ” ์ƒ์„ฑ
CREATE TABLE table_name (
   column_name datatype constraints
);

-- ํ…Œ์ด๋ธ” ์ˆ˜์ •
ALTER TABLE table_name
ADD column_name datatype;

-- ํ…Œ์ด๋ธ” ์‚ญ์ œ
DROP TABLE table_name;

-- ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝ
RENAME TABLE old_table_name TO new_table_name;

-- ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™”
TRUNCATE TABLE table_name;

๐Ÿ”ค Character Set & Collation

  • Character set: ๋ฌธ์ž๊ฐ€ ์ปดํ“จํ„ฐ์— ์ €์žฅ๋  ๋•Œ ์–ด๋–ค '์ฝ”๋“œ'๋กœ ์ €์žฅ๋ ์ง€๋ฅผ ์ •ํ•˜๋Š” ๊ทœ์น™์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด UTF-8, ASCII ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • Collation: ์ €์žฅ๋œ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•˜๊ฑฐ๋‚˜ ์ •๋ ฌํ•  ๋•Œ ์ ์šฉ๋˜๋Š” ๊ทœ์น™๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋กœ utf8_general_ci, utf8_bin์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ข ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ •๋ฆฌ

1. ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ ํƒ€์ž…

  • CHAR(M): ๊ณ ์ • ๊ธธ์ด ๋ฌธ์ž์—ด. M์€ 1~255 ์‚ฌ์ด์˜ ๊ฐ’์ด๋ฉฐ, ์งง์€ ๋ฌธ์ž์—ด๋„ ์ง€์ •ํ•œ ๊ธธ์ด๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ: CHAR(20)์— 10์ž๋ฅผ ์ €์žฅํ•ด๋„ 20๋ฐ”์ดํŠธ ์‚ฌ์šฉ ๐Ÿ“
  • VARCHAR(M): ๊ฐ€๋ณ€ ๊ธธ์ด ๋ฌธ์ž์—ด. M์€ 1~65535 ์‚ฌ์ด์˜ ๊ฐ’์ด๋ฉฐ, ์‹ค์ œ ์ €์žฅํ•œ ๊ธธ์ด๋งŒํผ๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ + ๊ธธ์ด ์ •๋ณด ์ €์žฅ์šฉ 1๋ฐ”์ดํŠธ ์ถ”๊ฐ€.

    • ์˜ˆ: VARCHAR(20)์— 10์ž๋ฅผ ์ €์žฅํ•˜๋ฉด 11๋ฐ”์ดํŠธ ์‚ฌ์šฉ ๐Ÿ“
  • TEXT ํƒ€์ž…๋“ค:

    • TINYTEXT: ์ตœ๋Œ€ 255๋ฐ”์ดํŠธ
    • TEXT: ์ตœ๋Œ€ 65535๋ฐ”์ดํŠธ
    • MEDIUMTEXT: ์ตœ๋Œ€ 16777215๋ฐ”์ดํŠธ
    • LONGTEXT: ์ตœ๋Œ€ 4294967295๋ฐ”์ดํŠธ
  • ENUM: ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์ตœ๋Œ€ 65535๊ฐœ์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ˆซ์ž๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

  • SET: ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ฐ’๋“ค ์ค‘ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์ตœ๋Œ€ 64๊ฐœ์˜ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

2. ์ˆซ์ž ๋ฐ์ดํ„ฐ ํƒ€์ž…

  • BIT(M): ๋น„ํŠธ ๊ฐ’์„ ์ €์žฅํ•˜๋ฉฐ, M์€ 1~64 ์‚ฌ์ด์˜ ๋น„ํŠธ ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • BOOL/BOOLEAN: TINYINT(1)์˜ ๋™์˜์–ด๋กœ, 0์€ false, 1์€ true๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

  • ์ •์ˆ˜ ํƒ€์ž…:

    • TINYINT: 1๋ฐ”์ดํŠธ, signed: -128 ~ 127, unsigned: 0 ~ 255
    • SMALLINT: 2๋ฐ”์ดํŠธ, signed: -32768 ~ 32767, unsigned: 0 ~ 65535
    • MEDIUMINT: 3๋ฐ”์ดํŠธ, signed: -8388608 ~ 8388607, unsigned: 0 ~ 16777215
    • INT: 4๋ฐ”์ดํŠธ, signed: -2147483648 ~ 2147483647, unsigned: 0 ~ 4294967295
    • BIGINT: 8๋ฐ”์ดํŠธ, signed: -9223372036854775808 ~ 9223372036854775807, unsigned: 0 ~ 18446744073709551615
  • ๋ถ€๋™ ์†Œ์ˆ˜์  ํƒ€์ž…:

    • FLOAT(M, D): ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž (M: ์ด ์ž๋ฆฟ์ˆ˜, D: ์†Œ์ˆ˜์  ์ดํ•˜ ์ž๋ฆฟ์ˆ˜)
    • DOUBLE(M, D): FLOAT๋ณด๋‹ค ๋” ๋†’์€ ์ •๋ฐ€๋„ ์ œ๊ณต
  • ๊ณ ์ • ์†Œ์ˆ˜์  ํƒ€์ž…:

    • DECIMAL(M, D): ๊ณ ์ • ์†Œ์ˆ˜์  ์ˆซ์ž (๊ธˆ์œต ๊ณ„์‚ฐ์— ์ ํ•ฉ)
    • NUMERIC(M, D): DECIMAL์˜ ๋™์˜์–ด

3. ๋‚ ์งœ/์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํƒ€์ž…

  • DATE: ๋‚ ์งœ๋ฅผ YYYY-MM-DD ํ˜•์‹์œผ๋กœ ์ €์žฅ (๋ฒ”์œ„: 1001-01-01 ~ 9999-12-31)
  • TIME: ์‹œ๊ฐ„์„ HH:MM:SS ํ˜•์‹์œผ๋กœ ์ €์žฅ (๋ฒ”์œ„: -838:59:59 ~ 838:59:59)
  • DATETIME: ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ YYYY-MM-DD HH:MM:SS ํ˜•์‹์œผ๋กœ ์ €์žฅ (๋ฒ”์œ„: 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59)
  • TIMESTAMP: ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’์„ ์ €์žฅํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋˜๋Š” ์ˆ˜์ • ์‹œ ์ž๋™ ์—…๋ฐ์ดํŠธ (๋ฒ”์œ„: 1970-01-01 ~ 2038-01-19)
  • YEAR(2|4): 2์ž๋ฆฌ ๋˜๋Š” 4์ž๋ฆฌ์˜ ์—ฐ๋„ ์ €์žฅ ๊ฐ€๋Šฅ (2์ž๋ฆฌ: 70-69, 4์ž๋ฆฌ: 1901-2155)

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

  • BINARY(M): ๊ณ ์ • ๊ธธ์ด ์ด์ง„ ๋ฌธ์ž์—ด ์ €์žฅ
  • VARBINARY(M): ๊ฐ€๋ณ€ ๊ธธ์ด ์ด์ง„ ๋ฌธ์ž์—ด ์ €์žฅ
  • BLOB ํƒ€์ž…๋“ค:
    • TINYBLOB: ์ตœ๋Œ€ 255๋ฐ”์ดํŠธ
    • BLOB: ์ตœ๋Œ€ 65535๋ฐ”์ดํŠธ
    • MEDIUMBLOB: ์ตœ๋Œ€ 16777215๋ฐ”์ดํŠธ
    • LONGBLOB: ์ตœ๋Œ€ 4294967295๋ฐ”์ดํŠธ

๐Ÿ›  CREATE ๊ตฌ๋ฌธ์—์„œ์˜ ์˜ต์…˜ ์†์„ฑ ๋ฐ ์ œ์•ฝ ์กฐ๊ฑด

MySQL์—์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์˜ต์…˜ ์†์„ฑ๊ณผ ์ œ์•ฝ ์กฐ๊ฑด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์˜ˆ์‹œ๋ฅผ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ๐Ÿ”ง ์˜ต์…˜ ์†์„ฑ

  • NOT NULL: ๊ฐ ํ–‰์—์„œ ํ•ด๋‹น ์—ด์€ ๋ฐ˜๋“œ์‹œ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, NULL ๊ฐ’์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ:
      CREATE TABLE users (
        id INT NOT NULL,
        name VARCHAR(50) NOT NULL
      );
  • DEFAULT: ๊ฐ’์ด ๋ช…์‹œ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์„ค์ •๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ:
      CREATE TABLE products (
        id INT AUTO_INCREMENT,
        price DECIMAL(10, 2) DEFAULT 0.00
      );
  • UNSIGNED: ์Œ์ˆ˜ ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์–‘์ˆ˜๋งŒ ํ—ˆ์šฉํ•˜๋Š” ์ˆซ์ž ํƒ€์ž…์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ:
      CREATE TABLE scores (
        id INT UNSIGNED,
        points INT UNSIGNED
      );
  • AUTO INCREMENT: ์ƒˆ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ํ•„๋“œ ๊ฐ’์ด ์ž๋™์œผ๋กœ 1์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ:
      CREATE TABLE orders (
        id INT AUTO_INCREMENT PRIMARY KEY,
        order_number VARCHAR(20)
      );
  • PRIMARY KEY: ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์—ด๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. AUTO INCREMENT์™€ ์ž์ฃผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ:
      CREATE TABLE employees (
        employee_id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(100)
      );

2. ๐Ÿงฉ ์ œ์•ฝ ์กฐ๊ฑด

  • NOT NULL: ์—ด์— NULL ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ฐ˜๋“œ์‹œ ๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ:
      ALTER TABLE students
      MODIFY COLUMN name VARCHAR(50) NOT NULL;
  • UNIQUE: ์—ด์˜ ๊ฐ’์ด ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ:
      CREATE TABLE accounts (
        id INT AUTO_INCREMENT,
        email VARCHAR(100) UNIQUE,
        PRIMARY KEY (id)
      );
  • PRIMARY KEY: ๊ณ ์œ ํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์—ด๋กœ ๊ฐ ํ–‰์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ:
      CREATE TABLE customers (
        customer_id INT PRIMARY KEY,
        name VARCHAR(50)
      );
  • FOREIGN KEY: ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ PRIMARY KEY๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ํ‚ค์ž…๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ:
      CREATE TABLE orders (
        order_id INT PRIMARY KEY,
        customer_id INT,
        FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
      );
  • DEFAULT: ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์„ค์ •๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ:
      CREATE TABLE payments (
        payment_id INT AUTO_INCREMENT PRIMARY KEY,
        amount DECIMAL(10, 2) DEFAULT 0.00
      );
  • CHECK: ์—ด์˜ ๊ฐ’์ด ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•˜๋„๋ก ์ œ์•ฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. (MySQL 8.0 ์ด์ƒ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

    • ์˜ˆ์‹œ:
      CREATE TABLE employees (
        id INT AUTO_INCREMENT PRIMARY KEY,
        salary DECIMAL(10, 2),
        CHECK (salary > 0)
      );

3. ๐Ÿ’ก ์ œ์•ฝ ์กฐ๊ฑด ์„ค๋ช…

์ œ์•ฝ ์กฐ๊ฑด์„ ํ†ตํ•ด ์ปฌ๋Ÿผ์— ์ €์žฅ๋  ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์ž˜๋ชป๋œ ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ์•ฝ ์กฐ๊ฑด์€ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ๋•Œ๋‚˜ ALTER ๋ช…๋ น์–ด๋กœ ๋‚˜์ค‘์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


4. ๐Ÿ“š ์Šคํ‚ค๋งˆ

์Šคํ‚ค๋งˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋  ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์™€ ํ˜•์‹์„ ์ •์˜ํ•˜๋Š” ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์กฐ์ง๊ณผ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


5. ๐Ÿ“Š ER ๋‹ค์ด์–ด๊ทธ๋žจ (ERD)

ER ๋‹ค์ด์–ด๊ทธ๋žจ์€ ํ˜„์‹ค ์„ธ๊ณ„์˜ ๊ฐœ์ฒด์™€ ๊ทธ๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“


๐Ÿ”„ ALTER ๋ช…๋ น์–ด๋กœ ํ…Œ์ด๋ธ” ์ˆ˜์ •ํ•˜๊ธฐ

์ด ์„น์…˜์—์„œ๋Š” MySQL์—์„œ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ •ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ๋ช…๋ น์–ด์™€ ์˜ˆ์‹œ๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

1. ๐Ÿ†• ์ปฌ๋Ÿผ ์ถ”๊ฐ€

  • ๋ช…๋ น์–ด:
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD COLUMN ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… ์ œ์•ฝ์กฐ๊ฑด;
  • ์„ค๋ช…: ํ…Œ์ด๋ธ”์— ์ƒˆ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    ALTER TABLE students ADD COLUMN age INT NOT NULL;
    ์œ„ ์˜ˆ์‹œ๋Š” students ํ…Œ์ด๋ธ”์— age๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

2. ๐Ÿ”„ ์ปฌ๋Ÿผ ๋ณ€๊ฒฝ

  • ๋ช…๋ น์–ด:
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… MODIFY COLUMN ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… ์ œ์•ฝ์กฐ๊ฑด;
  • ์„ค๋ช…: ๊ธฐ์กด ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‚˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    ALTER TABLE employees MODIFY COLUMN salary DECIMAL(10, 2) NOT NULL;
    ์œ„ ์ฝ”๋“œ๋Š” employees ํ…Œ์ด๋ธ”์—์„œ salary ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ DECIMAL(10, 2)๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , NOT NULL ์ œ์•ฝ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

3. โœ๏ธ ์ปฌ๋Ÿผ ์ด๋ฆ„ ๋ณ€๊ฒฝ

  • ๋ช…๋ น์–ด:
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… CHANGE COLUMN ์ด์ „์ปฌ๋Ÿผ๋ช… ๋ณ€๊ฒฝ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… ์ œ์•ฝ์กฐ๊ฑด;
  • ์„ค๋ช…: ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด๋กœ, ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‚˜ ์ œ์•ฝ ์กฐ๊ฑด๋„ ๋™์‹œ์— ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    ALTER TABLE orders CHANGE COLUMN order_date order_created_at DATETIME NOT NULL;
    ์œ„ ์˜ˆ์‹œ๋Š” orders ํ…Œ์ด๋ธ”์˜ order_date ์ปฌ๋Ÿผ์„ order_created_at์œผ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋™์‹œ์—, DATETIME ํƒ€์ž…๊ณผ NOT NULL ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

4. โŒ ์ปฌ๋Ÿผ ์‚ญ์ œ

  • ๋ช…๋ น์–ด:
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP COLUMN ์ปฌ๋Ÿผ๋ช…;
  • ์„ค๋ช…: ํ…Œ์ด๋ธ”์—์„œ ํŠน์ • ์ปฌ๋Ÿผ์„ ์‚ญ์ œํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    ALTER TABLE students DROP COLUMN address;
    ์ด ์ฝ”๋“œ๋Š” students ํ…Œ์ด๋ธ”์—์„œ address ์ปฌ๋Ÿผ์„ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

5. ๐Ÿ“ ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝ

  • ๋ช…๋ น์–ด:
    ALTER TABLE ์ด์ „ํ…Œ์ด๋ธ”๋ช… RENAME ๋ณ€๊ฒฝํ…Œ์ด๋ธ”๋ช…;
  • ์„ค๋ช…: ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    ALTER TABLE customers RENAME TO clients;
    ์œ„ ์ฝ”๋“œ๋Š” customers ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์„ clients๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

๐Ÿ“š Index (์ธ๋ฑ์Šค)

๐Ÿ” ์ธ๋ฑ์Šค๋ž€?

  • ์ •์˜: ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ๋ฐ ์กฐ์ž‘ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ๐Ÿ“–

๐Ÿ› ๏ธ ์ธ๋ฑ์Šค์˜ ์—ญํ• 

  • ๊ฒ€์ƒ‰ ์†๋„ ํ–ฅ์ƒ: ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์„ ๋น ๋ฅด๊ฒŒ ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๋กœ, ์ฑ…์˜ ์ฐพ์•„๋ณด๊ธฐ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„์ค๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹œ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

  • ์ˆœ์„œ ๋งค๊น€: ์ธ๋ฑ์Šค๋Š” ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์—ฌ, ๋ ˆ์ฝ”๋“œ ์ ‘๊ทผ์„ ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜ ์ฐพ๊ธฐ: ์ธ๋ฑ์Šค๋Š” ์ปฌ๋Ÿผ์˜ ๊ฐ’๊ณผ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ์˜ ์ €์žฅ ์œ„์น˜๋ฅผ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ์ €์žฅํ•˜์—ฌ, ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค. ๐Ÿ”‘

  • ๊ณ ์œ ์„ฑ ๋ณด์žฅ: ๊ณ ์œ  ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์— ์ค‘๋ณต๋œ ๊ฐ’์ด ๋“ค์–ด๊ฐ€์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ’พ ์ธ๋ฑ์Šค์˜ ์ €์žฅ

  • ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์„ ์ €์žฅํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„๋ณด๋‹ค ์ ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋ฉฐ, ๋ณดํ†ต ํ‚ค ํ•„๋“œ๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • MySQL์—์„œ๋Š” ์ธ๋ฑ์Šค๋ฅผ MYI (MySQL Index) ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ—‚๏ธ

โš ๏ธ ์ธ๋ฑ์Šค์˜ ๋ฌธ์ œ์ 

  1. ๐Ÿ“ ์ธ๋ฑ์Šค ํฌ๊ธฐ ๋ฌธ์ œ:

    • ์ธ๋ฑ์Šค๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ธ๋ฑ์Šค ์ž์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋งˆ์น˜ ์ฑ…์˜ ๋ชจ๋“  ํŽ˜์ด์ง€์— ๋‹จ์–ด๋ฅผ ์ฐพ์•„๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ, ์ธ๋ฑ์Šค๊ฐ€ ๋ณธ๋ฌธ๋ณด๋‹ค ์ปค์ง€๋Š” ์ƒํ™ฉ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.
  2. โณ ์„ฑ๋Šฅ ์ €ํ•˜:

    • ๋ถˆํ•„์š”ํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์ „์ฒด ํ…Œ์ด๋ธ”์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ธ๋ฑ์Šค๊ฐ€ ๋น„ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  3. ๐Ÿ’ฝ ์ถ”๊ฐ€์ ์ธ ๋””์Šคํฌ ๊ณต๊ฐ„ ํ•„์š”:

    • ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ” ์™ธ์— ๋ณ„๋„์˜ ์ €์žฅ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํฌ๊ธฐ์˜ ์•ฝ 10% ์ •๋„๋ฅผ ์ถ”๊ฐ€๋กœ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. โฑ๏ธ ์ธ๋ฑ์Šค ์ƒ์„ฑ ์‹œ๊ฐ„ ์†Œ์š”:

    • ์ธ๋ฑ์Šค๋ฅผ ์ฒ˜์Œ ์ƒ์„ฑํ•  ๋•Œ ํŠนํžˆ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์€ ํ…Œ์ด๋ธ”์—์„œ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์€ ๊ธด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ๐Ÿ”„ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์—์„œ์˜ ์„ฑ๋Šฅ ์ €ํ•˜:

    • ํ…Œ์ด๋ธ”์—์„œ INSERT, UPDATE, DELETE์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋ฉด ์ธ๋ฑ์Šค๊ฐ€ ๊ณ„์† ๊ฐฑ์‹ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ถ”๊ฐ€์ ์ธ ์ž‘์—… ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•ด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…๋˜๊ฑฐ๋‚˜ ์ˆ˜์ •๋  ๋•Œ๋งˆ๋‹ค ์ธ๋ฑ์Šค๋ฅผ ์žฌ์ •๋ ฌํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ž‘์—… ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ—‚๏ธ Index์˜ ์ข…๋ฅ˜

๐Ÿ”— ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค (Clustered Index)

ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ๊ธฐ์ค€์— ๋งž์ถฐ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ์ด ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ ์ˆœ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์žฌ์ •๋ ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ผ๋ฐ˜์ ์ธ ์ธ๋ฑ์Šค์™€๋Š” ๋‹ค๋ฅธ ํŠน์ง•์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

ํŠน์ง• ๋ฐ ์„ค๋ช…

  1. ๐Ÿ“ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ ์ €์žฅ:

    • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ํŠน์ • ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์˜์–ด ์‚ฌ์ „์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌํ•ด ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: ํ•™์ƒ ํ…Œ์ด๋ธ”์—์„œ ํ•™๋ฒˆ ์ปฌ๋Ÿผ์— ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ•™๋ฒˆ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
  2. โš™๏ธ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์˜ ์„ฑ๋Šฅ ์ด์Šˆ:

    • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์—์„œ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ •๋ ฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  3. ๐Ÿ”’ ํ…Œ์ด๋ธ”๋‹น ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋งŒ ๊ฐ€๋Šฅ:

    • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”๋‹น ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ์ธ๋ฑ์Šค ๊ธฐ์ค€์œผ๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  4. โฉ ๊ฒ€์ƒ‰ ์†๋„:

    • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋น ๋ฆ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์ž…๋ ฅ, ์ˆ˜์ •, ์‚ญ์ œ ์ž‘์—…์—์„œ๋Š” ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ํ•„์š”ํ•ด ์„ฑ๋Šฅ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ๐Ÿ› ๏ธ MySQL์˜ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค:

    • MySQL์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Primary Key๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ Primary Key๊ฐ€ ์—†๋‹ค๋ฉด, ๊ณ ์œ ํ•˜๊ณ  NOT NULL ์กฐ๊ฑด์„ ๊ฐ€์ง„ ์ปฌ๋Ÿผ์ด ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ Tip: ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ์ž์ฃผ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ณ€๊ฒฝ ์ž‘์—…์ด ์ ์€ ํ…Œ์ด๋ธ”์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”ง ๋ณด์กฐ ์ธ๋ฑ์Šค (Secondary Index)

๋ณด์กฐ ์ธ๋ฑ์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค์™€ ๋‹ฌ๋ฆฌ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌํ•˜์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€์— ์ •๋ ฌ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ›„๋ณดํ‚ค(Candidate Key)์— ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ๋ณธํ‚ค ์™ธ์— ์œ ์ผ์„ฑ์„ ๊ฐ€์ง€๋Š” ํ‚ค๋“ค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด์กฐ ์ธ๋ฑ์Šค์˜ ํŠน์ง•

  1. ๐Ÿ“„ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€์™€ ๋ณ„๋„์˜ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€:

    • ๋ณด์กฐ ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ณธ๋ฌธ์˜ ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์ƒ‰์ธ(์ฐพ์•„๋ณด๊ธฐ)๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  2. ๐Ÿ“ ๋ฐ์ดํ„ฐ ์œ„์น˜์˜ ์ฃผ์†Œ๊ฐ’ (RID):

    • ๋ณด์กฐ ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ์˜ ์‹ค์ œ ๊ฐ’ ๋Œ€์‹  RID(Record Identifier, ๋ ˆ์ฝ”๋“œ ์‹๋ณ„์ž)๋ฅผ ์ €์žฅํ•˜์—ฌ, ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. โšก ์„ฑ๋Šฅ:

    • ๋ณด์กฐ ์ธ๋ฑ์Šค๋Š” ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ณด๋‹ค ๋Š๋ฆฌ์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์ž…๋ ฅ, ์ˆ˜์ •, ์‚ญ์ œ ์‹œ ๋ถ€ํ•˜๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์žฌ์ •๋ ฌ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  4. ๐ŸŒ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณด์กฐ ์ธ๋ฑ์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ:

    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณด์กฐ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด ๋‹ค์–‘ํ•œ ์ปฌ๋Ÿผ์—์„œ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋„ˆ๋ฌด ๋งŽ์€ ๋ณด์กฐ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

-- ๊ธฐ๋ณธ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100),
    department_id INT,
    salary DECIMAL(10, 2)
);

-- ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” Primary Key๋กœ ์ƒ์„ฑ๋จ (employee_id)
-- ๋ณด์กฐ ์ธ๋ฑ์Šค ์ƒ์„ฑ (์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰๋˜๋„๋ก ์ธ๋ฑ์Šค ์ถ”๊ฐ€)
CREATE INDEX idx_employee_name ON employees (name);

-- ๋ณด์กฐ ์ธ๋ฑ์Šค ์ƒ์„ฑ (๋ถ€์„œ ID๋กœ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰๋˜๋„๋ก ์ธ๋ฑ์Šค ์ถ”๊ฐ€)
CREATE INDEX idx_department ON employees (department_id);

์ด ์˜ˆ์‹œ์—์„œ๋Š” name๊ณผ department_id์— ๊ฐ๊ฐ ๋ณด์กฐ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, ํ•ด๋‹น ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ› ๏ธ


์ด ๋‚ด์šฉ์„ ์ข€ ๋” ๋‹ค๋“ฌ๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์„œ ์ •๋ฆฌํ•ด ๋“œ๋ฆด๊ฒŒ์š”! ๐Ÿ˜Š


๐Ÿท๏ธ ์ œ์•ฝ ์กฐ๊ฑด: Index ๊ฒฐ์ •

1. Primary Key์™€ Unique Key๊ฐ€ ๋ชจ๋‘ ์žˆ๋Š” ๊ฒฝ์šฐ

  • Primary Key์™€ Unique Key๊ฐ€ ํ•จ๊ป˜ ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์—์„œ ์ธ๋ฑ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค:
    • Primary Key๋กœ ์ง€์ •๋œ ์ปฌ๋Ÿผ์€ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค (Clustered Index)๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
      • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ๐Ÿ“
    • Unique Key๋กœ ์ง€์ •๋œ ์ปฌ๋Ÿผ์€ ๋ณด์กฐ ์ธ๋ฑ์Šค (Secondary Index)๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
      • ๋ณด์กฐ ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌํ•˜์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€์— ์ €์žฅํ•ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ”
    • Unique Key๋Š” NULL ๊ฐ’์˜ ํ—ˆ์šฉ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋ณด์กฐ ์ธ๋ฑ์Šค๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
      • Unique Key๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์„ ๋ณด์žฅํ•˜์ง€๋งŒ, ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค์ฒ˜๋Ÿผ ๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์กฐ ์ธ๋ฑ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

2. Primary Key๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ

  • Primary Key๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, Unique Key์™€ NOT NULL ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค:
    • Unique Key + NOT NULL ์กฐ๊ฑด์ด ์žˆ์„ ๊ฒฝ์šฐ:
      • ์ด ์ปฌ๋Ÿผ์€ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. Primary Key๊ฐ€ ์—†๋Š” ํ…Œ์ด๋ธ”์—์„œ ์œ ์ผ์„ฑ๊ณผ NOT NULL ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ์ปฌ๋Ÿผ์ด ๋ฐ์ดํ„ฐ ์ •๋ ฌ์˜ ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค.
    • Unique Key๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ (NOT NULL ์กฐ๊ฑด์ด ์—†์Œ):
      • ์ด ๊ฒฝ์šฐ ๋ณด์กฐ ์ธ๋ฑ์Šค๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. NOT NULL ์กฐ๊ฑด์ด ์—†์œผ๋ฉด ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์  ์ •๋ ฌ์ด ํ•„์š”ํ•˜์ง€ ์•Š์•„ ๋ณด์กฐ ์ธ๋ฑ์Šค๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ

  1. Primary Key์™€ Unique Key๊ฐ€ ๋ชจ๋‘ ์žˆ๋Š” ํ…Œ์ด๋ธ”:

    CREATE TABLE users (
        user_id INT PRIMARY KEY,         -- Primary Key๋กœ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค
        email VARCHAR(100) UNIQUE,       -- Unique Key๋กœ ๋ณด์กฐ ์ธ๋ฑ์Šค
        username VARCHAR(50)
    );
  2. Primary Key๊ฐ€ ์—†๋Š” ํ…Œ์ด๋ธ”์—์„œ UNIQUE + NOT NULL ์กฐ๊ฑด:

    CREATE TABLE products (
        product_code VARCHAR(100) UNIQUE NOT NULL,  -- ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค
        product_name VARCHAR(255),
        price DECIMAL(10, 2)
    );
  3. Primary Key๊ฐ€ ์—†๊ณ  UNIQUE๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ:

    CREATE TABLE departments (
        department_code VARCHAR(50) UNIQUE,  -- ๋ณด์กฐ ์ธ๋ฑ์Šค (NOT NULL ์กฐ๊ฑด ์—†์Œ)
        department_name VARCHAR(100)
    );

๐Ÿ› ๏ธ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ธ๋ฑ์Šค ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ๋Š” ์„ฑ๋Šฅ์„ ์ขŒ์šฐํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ผญ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ๋“ค์ž…๋‹ˆ๋‹ค.


1. ์ธ๋ฑ์Šค๋Š” ํŠน์ • ์—ด(Column)์— ์ƒ์„ฑ

  • ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ” ์ „์ฒด๊ฐ€ ์•„๋‹Œ, ํŠน์ • ์—ด์— ๋Œ€ํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์—ด์— ๋Œ€ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: ํ•™์ƒ ํ…Œ์ด๋ธ”์—์„œ ํ•™๋ฒˆ์ด๋‚˜ ์ด๋ฆ„์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ์ด ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. WHERE ์ ˆ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์—ด์— ์ธ๋ฑ์Šค ์ƒ์„ฑ

  • WHERE ์ ˆ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์—ด์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ WHERE ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    SELECT * FROM students WHERE student_id = 123;
    ์ด ์ฟผ๋ฆฌ์—์„œ student_id์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

3. WHERE ์ ˆ์— ์‚ฌ์šฉ๋˜๋”๋ผ๋„ ์ž์ฃผ ์‚ฌ์šฉํ•ด์•ผ ์ธ๋ฑ์Šค๊ฐ€ ์œ ์šฉ

  • WHERE ์ ˆ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•ด์„œ ๋ชจ๋‘ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์—ด์—๋งŒ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ์ธ๋ฑ์Šค ์ƒ์„ฑ์˜ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ๋ฐ์ดํ„ฐ ์ค‘๋ณต๋„๊ฐ€ ๋†’์€ ์—ด์— ์ธ๋ฑ์Šค ์ƒ์„ฑ์€ ํšจ๊ณผ๊ฐ€ ์ ์Œ

  • ์ค‘๋ณต๋„๊ฐ€ ๋†’์€ ์—ด(์ฆ‰, ๊ฐ’์ด ๋งŽ์ด ์ค‘๋ณต๋˜๋Š” ์—ด)์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ด๋„ ์„ฑ๋Šฅ ํ–ฅ์ƒ ํšจ๊ณผ๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต๋„๊ฐ€ ๋‚ฎ์€ ์—ด์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • ์ค‘๋ณต๋„๊ฐ€ ๋‚ฎ์€ ์—ด์˜ ์˜ˆ: ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ, ํ•™๋ฒˆ ๋“ฑ ๊ณ ์œ ํ•œ ๊ฐ’๋“ค์ด ๋งŽ์€ ์—ด.

5. ์™ธ๋ž˜ํ‚ค(Foreign Key)์— ์ž๋™์œผ๋กœ ์ธ๋ฑ์Šค ์ƒ์„ฑ

  • ์™ธ๋ž˜ํ‚ค๋กœ ์„ค์ •๋œ ์—ด์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์™ธ๋ž˜ํ‚ค๊ฐ€ ์ž์ฃผ ์กฐ์ธ ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์กฐ์น˜์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    CREATE TABLE orders (
        order_id INT PRIMARY KEY,
        customer_id INT,
        FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
    );
    ์ด ์˜ˆ์‹œ์—์„œ customer_id์— ์ธ๋ฑ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

6. ์กฐ์ธ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์—ด์— ์ธ๋ฑ์Šค ์ƒ์„ฑ

  • ํ…Œ์ด๋ธ” ๊ฐ„ ์กฐ์ธ ์—ฐ์‚ฐ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์—ด์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ์กฐ์ธ ์‹œ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    SELECT * FROM students s
    JOIN courses c ON s.student_id = c.student_id;
    ์ด ์ฟผ๋ฆฌ์—์„œ student_id์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์กฐ์ธ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

7. ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…(์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œ)์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ฃผ์˜

  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…(์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œ)์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋ฉด, ์ธ๋ฑ์Šค๊ฐ€ ๊ณ„์† ๊ฐฑ์‹ ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑํ•˜๋ฉด, ์ด๋Ÿฌํ•œ ์ž‘์—…์ด ์žฆ์„ ๋•Œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณ€๊ฒฝ ์ž‘์—…์ด ์ž์ฃผ ์ผ์–ด๋‚˜๋Š” ํ…Œ์ด๋ธ”์—์„œ๋Š” ์‹ ์ค‘ํ•˜๊ฒŒ ์ธ๋ฑ์Šค๋ฅผ ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

8. ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”๋‹น ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ ๊ฐ€๋Šฅ

  • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ์ธ๋ฑ์Šค์ด๋ฏ€๋กœ, ํ•œ ํ…Œ์ด๋ธ”์— ํ•˜๋‚˜์˜ ๊ธฐ์ค€์œผ๋กœ๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    CREATE TABLE students (
        student_id INT PRIMARY KEY,  -- ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค
        name VARCHAR(100)
    );
    ์ด ๊ฒฝ์šฐ, ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” student_id ๊ธฐ์ค€์œผ๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.

9. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค๋Š” ์ œ๊ฑฐ

  • ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ธ๋ฑ์Šค๋Š” ์ธ๋ฑ์Šค ๊ด€๋ฆฌ ๋น„์šฉ์ด ํฌ๋ฏ€๋กœ, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: ํ…Œ์ด๋ธ”์„ ์„ค๊ณ„ํ•  ๋•Œ ์ž˜๋ชป ์ƒ์„ฑ๋œ ์ธ๋ฑ์Šค๋‚˜, ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค๋Š” ์„ฑ๋Šฅ์— ๋ถˆ๋ฆฌํ•˜๋ฏ€๋กœ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•˜์—ฌ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โš™๏ธ ์ž๋™ INDEX

MySQL์—์„œ๋Š” Primary Key๋‚˜ Unique Key์™€ ๊ฐ™์€ ์ œ์•ฝ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์ธ๋ฑ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์˜ˆ์‹œ๋“ค์„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.


์˜ˆ์‹œ 1: Primary Key๊ฐ€ ์žˆ๋Š” ํ…Œ์ด๋ธ”

CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    name VARCHAR(50),
    department VARCHAR(30),
    hire_date DATE
);
  • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค: emp_id๋Š” Primary Key๋กœ ์ง€์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, MySQL์—์„œ๋Š” Primary Key์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” emp_id๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋ณด์กฐ ์ธ๋ฑ์Šค: name, department, hire_date ๊ฐ™์€ ๋‹ค๋ฅธ ์ปฌ๋Ÿผ๋“ค์—๋Š” ํ˜„์žฌ ์ธ๋ฑ์Šค๊ฐ€ ์—†์ง€๋งŒ, ํ•„์š”์— ๋”ฐ๋ผ ์ถ”๊ฐ€์ ์ธ ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ณด์กฐ ์ธ๋ฑ์Šค๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ 2: UNIQUE Key๊ฐ€ ์žˆ๋Š” ํ…Œ์ด๋ธ”

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_code VARCHAR(50) UNIQUE,
    price DECIMAL(10, 2)
);
  • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค: product_id๊ฐ€ Primary Key์ด๊ธฐ ๋•Œ๋ฌธ์— ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋Š” product_id๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋ณด์กฐ ์ธ๋ฑ์Šค: product_code์— UNIQUE ์ œ์•ฝ ์กฐ๊ฑด์ด ๋ถ™์–ด ์žˆ์–ด ์ž๋™์œผ๋กœ ๋ณด์กฐ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณ ์œ ์„ฑ์„ ๋ณด์žฅํ•˜๋ฉฐ, ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์ด๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๋ณด์กฐ ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์  ์ •๋ ฌ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ 3: Primary Key ์—†์ด UNIQUE Key๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ

CREATE TABLE users (
    email VARCHAR(100) UNIQUE NOT NULL,
    username VARCHAR(50),
    join_date DATE
);
  • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค: ์ด ํ…Œ์ด๋ธ”์—๋Š” Primary Key๊ฐ€ ์—†์œผ๋ฉฐ, email์ด UNIQUE์™€ NOT NULL ์กฐ๊ฑด์ด ์„ค์ •๋˜์–ด ์žˆ์–ด, email ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋Š” email ๊ธฐ์ค€์œผ๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋ณด์กฐ ์ธ๋ฑ์Šค: username์ด๋‚˜ join_date์—๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์ง€๋งŒ, ํ•„์š”์— ๋”ฐ๋ผ ๋ณด์กฐ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ 4: Primary Key์™€ ์—ฌ๋Ÿฌ ๋ณด์กฐ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    product_id INT,
    order_date DATE,
    UNIQUE (product_id)
);
  • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค: order_id๋Š” Primary Key๋กœ ์ง€์ •๋˜์–ด ์žˆ์–ด ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋Š” order_id๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋ณด์กฐ ์ธ๋ฑ์Šค: product_id๋Š” UNIQUE ์ œ์•ฝ ์กฐ๊ฑด์ด ์„ค์ •๋˜์–ด ์žˆ์–ด ๋ณด์กฐ ์ธ๋ฑ์Šค๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ customer_id๋‚˜ order_date์—๋„ ๋ณด์กฐ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“‹ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค์™€ ๋ณด์กฐ ์ธ๋ฑ์Šค์˜ ์ž๋™ ์ƒ์„ฑ๊ณผ ์ •๋ ฌ

  1. ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค์˜ ์ž๋™ ์ƒ์„ฑ:

    • Primary Key๊ฐ€ ์„ค์ •๋œ ํ…Œ์ด๋ธ”์€ ์ž๋™์œผ๋กœ ํ•ด๋‹น ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉฐ, ํ…Œ์ด๋ธ”๋‹น ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋˜ํ•œ, UNIQUE + NOT NULL์ด ์„ค์ •๋œ ์ปฌ๋Ÿผ์ด ์žˆ์„ ๊ฒฝ์šฐ, Primary Key๊ฐ€ ์—†๋Š” ํ…Œ์ด๋ธ”์—์„œ๋Š” ํ•ด๋‹น ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  2. ๋ณด์กฐ ์ธ๋ฑ์Šค์˜ ์ž๋™ ์ƒ์„ฑ:

    • UNIQUE ์ œ์•ฝ ์กฐ๊ฑด์ด ์„ค์ •๋œ ์ปฌ๋Ÿผ์€ ์ž๋™์œผ๋กœ ๋ณด์กฐ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ณด์กฐ ์ธ๋ฑ์Šค๋Š” ๊ณ ์œ ์„ฑ์„ ๋ณด์žฅํ•˜๋ฉด์„œ ํ•ด๋‹น ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์ด๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ณด์กฐ ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ณ„๋„์˜ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๋ฅผ ์œ ์ง€ํ•˜์—ฌ ๊ฒ€์ƒ‰์— ๋„์›€์„ ์ค๋‹ˆ๋‹ค.
  3. ์ •๋ ฌ๊ณผ ์„ฑ๋Šฅ:

    • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆ˜์ • ์‹œ ์„ฑ๋Šฅ ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ณด์กฐ ์ธ๋ฑ์Šค๋Š” ๋ฌผ๋ฆฌ์  ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์˜ ์„ฑ๋Šฅ ๋ถ€ํ•˜๊ฐ€ ์ ์œผ๋‚˜, ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์€ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ณด๋‹ค ์•ฝ๊ฐ„ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Š ์ธ๋ฑ์Šค ์ƒ์„ฑ, ํ™œ์šฉ, ์‚ญ์ œ์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ์˜ˆ์‹œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ธ๋ฑ์Šค๋Š” ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ค‘์š”ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ธ๋ฑ์Šค์˜ ์ƒ์„ฑ, ํ™œ์šฉ, ์‚ญ์ œ ๋ฐฉ๋ฒ•์„ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ์ธ๋ฑ์Šค ์ƒ์„ฑ

๐Ÿ”ง ๊ธฐ๋ณธ ์ธ๋ฑ์Šค ์ƒ์„ฑ ๋ฌธ๋ฒ•

CREATE [UNIQUE] INDEX ์ธ๋ฑ์Šค์ด๋ฆ„ ON ํ…Œ์ด๋ธ”์ด๋ฆ„ (์—ด์ด๋ฆ„) [ASC|DESC];
  • UNIQUE ์˜ต์…˜: ์—ด์˜ ๊ฐ’์ด ๊ณ ์œ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ค‘๋ณต๋œ ๊ฐ’์ด ์žˆ์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ASC/DESC: ๋ฐ์ดํ„ฐ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ(ASC) ๋˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ(DESC)์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ B-Tree ์ธ๋ฑ์Šค๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

  1. ๊ธฐ๋ณธ ๋ณด์กฐ ์ธ๋ฑ์Šค ์ƒ์„ฑ

    CREATE INDEX idx_emp_name ON employees (name);
    • employees ํ…Œ์ด๋ธ”์˜ name ์—ด์— ๋Œ€ํ•ด ๋ณด์กฐ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. idx_emp_name์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉฐ, name์„ ๊ธฐ์ค€์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
  2. ๊ณ ์œ  ์ธ๋ฑ์Šค ์ƒ์„ฑ

    CREATE UNIQUE INDEX idx_emp_email ON employees (email);
    • email ์—ด์— ๋Œ€ํ•ด ๊ณ ์œ  ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ค‘๋ณต๋œ ์ด๋ฉ”์ผ์„ ๋ฐฉ์ง€ํ•˜๊ณ , ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ๋†’์ž…๋‹ˆ๋‹ค.
  3. ์—ฌ๋Ÿฌ ์—ด์„ ์กฐํ•ฉํ•œ ์ธ๋ฑ์Šค ์ƒ์„ฑ

    CREATE INDEX idx_emp_name_dept ON employees (name, department);
    • name๊ณผ department ๋‘ ์—ด์„ ์กฐํ•ฉํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋‘ ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

2. ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค ์ƒ์„ฑ

  • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ์ฃผ๋กœ Primary Key์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ•œ ํ…Œ์ด๋ธ”์— ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ALTER TABLE์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

ALTER TABLE employees MODIFY COLUMN emp_id INT PRIMARY KEY;
  • emp_id๋ฅผ Primary Key๋กœ ์„ค์ •ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋Š” emp_id ๊ธฐ์ค€์œผ๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.

3. ์ธ๋ฑ์Šค ์กฐํšŒ

์ƒ์„ฑ๋œ ์ธ๋ฑ์Šค๋Š” SHOW INDEX ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SHOW INDEX FROM employees;
  • ์ด ๋ช…๋ น์–ด๋Š” employees ํ…Œ์ด๋ธ”์— ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ธ๋ฑ์Šค(ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค์™€ ๋ณด์กฐ ์ธ๋ฑ์Šค ํฌํ•จ)๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

4. ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•œ SELECT ์ฟผ๋ฆฌ

์ธ๋ฑ์Šค๋Š” WHERE ์ ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ํฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

  1. ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค ์ฐธ์กฐ

    SELECT * FROM employees WHERE emp_id = 123;
    • emp_id๋Š” Primary Key๋กœ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋ณด์กฐ ์ธ๋ฑ์Šค ์ฐธ์กฐ

    SELECT * FROM employees WHERE name = 'John' AND department = 'HR';
    • name๊ณผ department ์—ด์— ์„ค์ •๋œ ๋ณด์กฐ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•ด ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

5. ์ธ๋ฑ์Šค ์‚ญ์ œ

ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ธ๋ฑ์Šค๋Š” ์‚ญ์ œํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ

  1. ๋ณด์กฐ ์ธ๋ฑ์Šค ์‚ญ์ œ

    DROP INDEX idx_emp_name ON employees;
    • employees ํ…Œ์ด๋ธ”์˜ name ์—ด์— ๋Œ€ํ•ด ์ƒ์„ฑ๋œ ๋ณด์กฐ ์ธ๋ฑ์Šค idx_emp_name์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  2. ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค ์‚ญ์ œ (Primary Key ์‚ญ์ œ)

    ALTER TABLE employees DROP PRIMARY KEY;
    • employees ํ…Œ์ด๋ธ”์˜ Primary Key๋ฅผ ์‚ญ์ œํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“„ VIEW๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

VIEW๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋งํ•˜๋ฉฐ, ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์ง€๋งŒ, ์‹ค์ œ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. VIEW๋Š” ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๊ฑฐ๋‚˜ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” VIEW์˜ ์ฃผ์š” ํŠน์ง•๊ณผ ์žฅ๋‹จ์ ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.


๐Ÿ“Œ VIEW์˜ ํŠน์ง•

  1. ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”:

    • VIEW๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์— ์กด์žฌํ•˜๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
  2. ๋ฐ์ดํ„ฐ ์ €์žฅ ์—†์Œ:

    • VIEW๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ•„์š”ํ•œ ์‹œ์ ์— SELECT ๋ฌธ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  3. ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์˜ ๋‹จ์ˆœํ™”:

    • ๋ณต์žกํ•œ SQL ์ฟผ๋ฆฌ(์˜ˆ: JOIN, ์„œ๋ธŒ์ฟผ๋ฆฌ ๋“ฑ)๋ฅผ VIEW๋กœ ์ •์˜ํ•ด ๋‘๋ฉด, ๊ฐ„๋‹จํ•œ SELECT ๋ฌธ์œผ๋กœ ๋ณต์žกํ•œ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. MySQL์—์„œ์˜ VIEW:

    • MySQL์—์„œ VIEW๋Š” ๋‹จ์ˆœํžˆ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. SELECT ๋ฌธ์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  5. VIEW์™€ ํ…Œ์ด๋ธ”์˜ ์ฐจ์ด์ :

    • ํ…Œ์ด๋ธ”(Table)์€ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ˜๋ฉด, VIEW๋Š” ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ, SELECT ๋ฌธ์„ ์ €์žฅํ•˜๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ฆ‰, VIEW๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๐Ÿ’ก VIEW์˜ ์žฅ์ 

  1. ๋ณด์•ˆ์„ฑ ํ–ฅ์ƒ:

    • ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ ์ „์ฒด ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ , ํ•„์š”ํ•œ ์ •๋ณด๋งŒ SELECTํ•  ์ˆ˜ ์žˆ๋„๋ก VIEW๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ณด์•ˆ์„ฑ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ: ๊ณ ๊ฐ ํ…Œ์ด๋ธ”์—์„œ ์ด๋ฆ„๊ณผ ์ฃผ์†Œ๋งŒ ๋ณด์—ฌ์ฃผ๋Š” VIEW๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๊ถŒํ•œ ๊ด€๋ฆฌ:

    • ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์— ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  VIEW๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๊ถŒํ•œ ๊ด€๋ฆฌ๋ฅผ ์„ธ๋ถ„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์˜ ๋‹จ์ˆœํ™”:

    • ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ VIEW๋กœ ์ •์˜ํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ SQL ์ž‘์„ฑ์„ ํ”ผํ•˜๊ณ , ๊ฐ„๋‹จํ•œ SELECT ๋ฌธ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ์ฟผ๋ฆฌ ์žฌ์‚ฌ์šฉ์„ฑ:

    • ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ VIEW๋กœ ์ €์žฅํ•ด๋‘๋ฉด, ๋‹ค๋ฅธ ๊ณณ์—์„œ ๊ฐ„๋‹จํžˆ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ฟผ๋ฆฌ์˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐฉ์‹ ๋‹ค์–‘ํ™”:

    • VIEW๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์–‘ํ•œ ํ•„ํ„ฐ๋‚˜ ์กฐ๊ฑด์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  6. ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ์˜ํ–ฅ ์—†์Œ:

    • VIEW๋Š” ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์–ด ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โš ๏ธ VIEW์˜ ๋‹จ์ 

  1. ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฐฑ์‹ ์˜ ์ œํ•œ:

    • VIEW๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฐฑ์‹  ์ž‘์—…์€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ๋ณต์žกํ•œ ์กฐ์ธ์ด๋‚˜ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” VIEW์—์„œ๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  2. ์ธ๋ฑ์Šค ์ œํ•œ:

    • VIEW๋Š” ์ž์ฒด์ ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, VIEW์— ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ œํ•œ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”„ VIEW ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ

  • VIEW์˜ ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์— ์ข…์†๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด VIEW๋„ ์ž๋™์œผ๋กœ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋ฉด VIEW๋„ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์ตœ์‹  ์ƒํƒœ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด๋Š” VIEW๊ฐ€ SELECT ๋ฌธ์„ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๐Ÿ“Š VIEW ์ƒ์„ฑ, ๋Œ€์ฒด, ์ˆ˜์ •, ์‚ญ์ œ์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ์˜ˆ์‹œ

VIEW๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”๋กœ, ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œํ•œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” VIEW์˜ ์ƒ์„ฑ, ๋Œ€์ฒด, ์ˆ˜์ •, ์‚ญ์ œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ  ์˜ˆ์‹œ๋ฅผ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


1. VIEW ์ƒ์„ฑ

VIEW๋Š” SELECT ๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ƒ์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. VIEW๋Š” ์›๋ณธ ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”๋กœ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ

-- employees ํ…Œ์ด๋ธ”์—์„œ HR ๋ถ€์„œ๋งŒ ์กฐํšŒํ•˜๋Š” VIEW ์ƒ์„ฑ
CREATE VIEW employee_view AS 
SELECT emp_id, name, department 
FROM employees 
WHERE department = 'HR';
  • ์ด ์˜ˆ์‹œ๋Š” employees ํ…Œ์ด๋ธ”์—์„œ HR ๋ถ€์„œ์˜ ์ง์› ์ •๋ณด๋งŒ์„ ์กฐํšŒํ•˜๋Š” employee_view๋ผ๋Š” VIEW๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • VIEW๋Š” ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋งค๋ฒˆ SELECT ๋ฌธ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

2. VIEW ๋Œ€์ฒด (REPLACE)

๊ธฐ์กด์˜ VIEW๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ, CREATE OR REPLACE ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด VIEW๋ฅผ ๋ฎ์–ด์“ฐ๊ณ  ์ƒˆ๋กญ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์กด VIEW๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ , ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์˜ˆ์‹œ

-- employee_view์— hire_date ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ VIEW ๋Œ€์ฒด
CREATE OR REPLACE VIEW employee_view AS 
SELECT emp_id, name, department, hire_date
FROM employees 
WHERE department = 'HR';
  • ๊ธฐ์กด์˜ employee_view์—์„œ hire_date ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, ์ƒˆ๋กœ์šด VIEW๋กœ ๋Œ€์ฒดํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์ด ๋ฐฉ๋ฒ•์€ ๊ธฐ์กด VIEW๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•˜๋ฉฐ, ๋ฎ์–ด์“ฐ๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

3. VIEW ์ˆ˜์ • (ALTER)

VIEW์˜ SELECT ๋ฌธ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ALTER ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, SELECT ๋ฌธ์˜ ๋ณ€๊ฒฝ์—๋Š” ์ฃผ๋กœ CREATE OR REPLACE ๋ฐฉ์‹์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

-- employee_view๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ hire_date๊ฐ€ 2020๋…„ ์ดํ›„์ธ ๋ฐ์ดํ„ฐ๋งŒ ์กฐํšŒ
ALTER VIEW employee_view AS 
SELECT emp_id, name, department, hire_date
FROM employees 
WHERE hire_date > '2020-01-01';
  • employee_view๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ 2020๋…„ 1์›” 1์ผ ์ดํ›„์— ์ž…์‚ฌํ•œ ์ง์›๋“ค๋งŒ ์กฐํšŒํ•˜๋„๋ก ๋ณ€๊ฒฝํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
  • CREATE OR REPLACE ๋ฐฉ์‹์œผ๋กœ VIEW๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

4. VIEW ์‚ญ์ œ

VIEW๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” DROP ๋ฌธ์„ ์‚ฌ์šฉํ•ด ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. VIEW๋ฅผ ์‚ญ์ œํ•ด๋„ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ฐ์ดํ„ฐ์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ

-- employee_view๋ผ๋Š” VIEW ์‚ญ์ œ
DROP VIEW employee_view;
  • ์ด ๋ช…๋ น์€ employee_view๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์‚ญ์ œํ•˜๋”๋ผ๋„ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์ธ employees์™€ ๊ทธ ๋ฐ์ดํ„ฐ์—๋Š” ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ“Š View์˜ ์ข…๋ฅ˜ ๋ฐ ์„ค๋ช…

VIEW๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”๋กœ, ์‚ฌ์šฉ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹จ์ˆœ ๋ทฐ, ๋ณตํ•ฉ ๋ทฐ, ์ธ๋ผ์ธ ๋ทฐ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๊ฐ VIEW๋Š” ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐฉ์‹๊ณผ ํ™œ์šฉ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ฐ ๋ทฐ์˜ ์„ค๋ช…๊ณผ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.


1. ๋‹จ์ˆœ ๋ทฐ (Simple View)

๋‹จ์ˆœ ๋ทฐ๋Š” ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ์ฃผ๋กœ ๋‹จ์ผ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํŠน์ง•

  • ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋งŒ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋ฃน ํ•จ์ˆ˜(SUM, COUNT ๋“ฑ)์™€ DISTINCT๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • DML (Data Manipulation Language) ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: INSERT, UPDATE, DELETE).
  • DML ์ž‘์—… ์ œํ•œ ์‚ฌํ•ญ:
    • NOT NULL ์ œ์•ฝ์ด ์žˆ๋Š” ์ปฌ๋Ÿผ์ด VIEW์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ.
    • ์‚ฐ์ˆ  ํ‘œํ˜„์‹์ด ํฌํ•จ๋œ ์ปฌ๋Ÿผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ.
    • DISTINCT, GROUP BY ๋˜๋Š” ๊ทธ๋ฃน ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ.

์˜ˆ์‹œ

-- ๋‹จ์ˆœ ๋ทฐ ์ƒ์„ฑ
CREATE VIEW emp_view AS
SELECT emp_id, name, department
FROM employees;
  • employees ํ…Œ์ด๋ธ”์—์„œ emp_id, name, department ์ปฌ๋Ÿผ๋งŒ์„ ์กฐํšŒํ•˜๋Š” ๋‹จ์ˆœ ๋ทฐ์ž…๋‹ˆ๋‹ค.
  • ์ด ๋ทฐ์—์„œ๋Š” DML ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2. ๋ณตํ•ฉ ๋ทฐ (Complex View)

๋ณตํ•ฉ ๋ทฐ๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๊ฑฐ๋‚˜ ๊ทธ๋ฃน ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ VIEW์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํŠน์ง•

  • ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ฃน ํ•จ์ˆ˜(SUM, AVG, MAX ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • DISTINCT ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • DML ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ผ๋ถ€ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ

-- ๋ณตํ•ฉ ๋ทฐ ์ƒ์„ฑ
CREATE VIEW emp_dept_view AS
SELECT e.emp_id, e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;
  • employees์™€ departments ๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜์—ฌ emp_id, name, department_name์„ ์กฐํšŒํ•˜๋Š” ๋ณตํ•ฉ ๋ทฐ์ž…๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

3. ์ธ๋ผ์ธ ๋ทฐ (Inline View)

์ธ๋ผ์ธ ๋ทฐ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ FROM ์ ˆ์— ํฌํ•จ๋œ ํ˜•ํƒœ๋กœ, ์ฟผ๋ฆฌ ๋‚ด์—์„œ ์ž„์‹œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ž‘์„ฑ ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ง•

  • ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ FROM ์ ˆ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ํ…Œ์ด๋ธ” ๋Œ€์‹  ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • ํ•œ ๋ฒˆ์˜ ์ฟผ๋ฆฌ์—์„œ๋งŒ ์ž„์‹œ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

-- ์ธ๋ผ์ธ ๋ทฐ ์‚ฌ์šฉ
SELECT emp_id, name, department
FROM (
    SELECT emp_id, name, department_id
    FROM employees
    WHERE salary > 5000
) AS emp_subquery
JOIN departments d ON emp_subquery.department_id = d.department_id;
  • employees ํ…Œ์ด๋ธ”์—์„œ ๊ธ‰์—ฌ๊ฐ€ 5000 ์ด์ƒ์ธ ์ง์›์„ ์กฐํšŒํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ธ๋ผ์ธ ๋ทฐ๋กœ ์‚ฌ์šฉํ•˜์—ฌ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ departments ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
  • ์ž„์‹œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

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