๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
DBMS/Mariadb

[DBMS]MariaDB ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด: ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๋ฐ ์‹ค์ „ ํŒ

by YJ Dev 2024. 6. 7.
728x90
๋ฐ˜์‘ํ˜•
SMALL

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์—์„œ ๋ฌด๊ฒฐ์„ฑ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ์™ธ๋ž˜ ํ‚ค(Foreign Key) ์ œ์•ฝ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค. MariaDB์—์„œ๋„ ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” MariaDB ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์˜ ๊ฐœ๋…๋ถ€ํ„ฐ ์„ค์ • ๋ฐฉ๋ฒ•, ๋‹ค์–‘ํ•œ ์˜ต์…˜, ์‹ค์ „ ์˜ˆ์ œ, ๊ทธ๋ฆฌ๊ณ  ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊นŒ์ง€ ์™„๋ฒฝํ•˜๊ฒŒ ์•ˆ๋‚ดํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

maraidb ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด

๊ธฐ๋ณธ ๊ฐœ๋…๐Ÿงฉ

์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์˜ ์ •์˜

์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์€ ํ•œ ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค(Primary Key)์™€ ์—ฐ๊ฒฐ๋˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ž˜ ํ‚ค์˜ ์—ญํ• ๊ณผ ํ•„์š”์„ฑ

์™ธ๋ž˜ ํ‚ค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ , ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ, ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

MARIADB์—์„œ ์™ธ๋ž˜ ํ‚ค ์‚ฌ์šฉ์˜ ์žฅ์ 

  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ: ์™ธ๋ž˜ ํ‚ค๋Š” ๊ด€๋ จ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ญ์ƒ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ์ž๋™ ๋ฐ์ดํ„ฐ ์‚ญ์ œ/์—…๋ฐ์ดํŠธ: ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ๋ช…ํ™•ํ™”: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ ์‹œ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

MariaDB์—์„œ ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ์„ค์ •ํ•˜๊ธฐ๐Ÿ”ง

์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ๊ตฌ๋ฌธ ๋ฐ ์˜ต์…˜ ์„ค๋ช…

์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ SQL ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

CREATE TABLE `์ž์‹ํ…Œ์ด๋ธ”` (
    `id` INT PRIMARY KEY,
    `๋ถ€๋ชจ_id` INT,
    FOREIGN KEY (`๋ถ€๋ชจ_id`) REFERENCES `๋ถ€๋ชจํ…Œ์ด๋ธ”`(`id`)
);

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• ๋ฐ ์˜ˆ์ œ

์˜ˆ๋ฅผ ๋“ค์–ด, orders ํ…Œ์ด๋ธ”๊ณผ customers ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. orders ํ…Œ์ด๋ธ”์˜ customer_id๊ฐ€ customers ํ…Œ์ด๋ธ”์˜ id์™€ ์™ธ๋ž˜ ํ‚ค ๊ด€๊ณ„๋ฅผ ๋งบ๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CREATE TABLE `customers` (
    `id` INT PRIMARY KEY,
    `name` VARCHAR(100)
);

CREATE TABLE `orders` (
    `id` INT PRIMARY KEY,
    `order_date` DATE,
    `customer_id` INT,
    FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`)
);

์™ธ๋ž˜ ํ‚ค ์ƒ์„ฑ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

  • ์™ธ๋ž˜ ํ‚ค๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ์นผ๋Ÿผ๊ณผ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฐธ์กฐ๋˜๋Š” ํ…Œ์ด๋ธ”(๋ถ€๋ชจ ํ…Œ์ด๋ธ”)์— ๊ธฐ๋ณธ ํ‚ค ๋˜๋Š” ๊ณ ์œ  ํ‚ค(UNIQUE KEY)๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ์˜ต์…˜โš™๏ธ

์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ์˜ต์…˜

์™ธ๋ž˜ ํ‚ค ์„ค์ • ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. CASCADE

CASCADE ์˜ต์…˜์€ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ON DELETE CASCADE: ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์‚ญ์ œ๋  ๋•Œ, ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋„ ํ•จ๊ป˜ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • ON UPDATE CASCADE: ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ, ํ•ด๋‹น ํ‚ค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ž์‹ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค ๊ฐ’๋„ ํ•จ๊ป˜ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

2. SET NULL

SET NULL ์˜ต์…˜์€ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค ๊ฐ’์„ NULL๋กœ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ON DELETE SET NULL: ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์‚ญ์ œ๋  ๋•Œ, ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ž์‹ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค ๊ฐ’์ด NULL๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • ON UPDATE SET NULL: ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ, ํ•ด๋‹น ํ‚ค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ž์‹ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค ๊ฐ’์ด NULL๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

3. RESTRICT

RESTRICT ์˜ต์…˜์€ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์œผ๋ฉด ๋ณ€๊ฒฝ์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    • ON DELETE RESTRICT: ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ž์‹ ํ…Œ์ด๋ธ”์—์„œ ์ฐธ์กฐ๋˜๊ณ  ์žˆ์œผ๋ฉด ์‚ญ์ œ๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
    • ON UPDATE RESTRICT: ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์ž์‹ ํ…Œ์ด๋ธ”์—์„œ ์ฐธ์กฐ๋˜๊ณ  ์žˆ์œผ๋ฉด ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

3.NO ACTIOIN

NO ACTION ์˜ต์…˜์€ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ž์‹ ํ…Œ์ด๋ธ”์— ์•„๋ฌด๋Ÿฐ ์ž๋™ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ณ€๊ฒฝ์ด ์ž์‹ ํ…Œ์ด๋ธ”์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์œ„๋ฐ˜ํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

  • ON DELETE NO ACTION: ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์‚ญ์ œ๋  ๋•Œ ์ž์‹ ํ…Œ์ด๋ธ”์—์„œ ์ฐธ์กฐ๋˜๊ณ  ์žˆ์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์‚ญ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ON UPDATE NO ACTION: ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ ์ž์‹ ํ…Œ์ด๋ธ”์—์„œ ์ฐธ์กฐ๋˜๊ณ  ์žˆ์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ ์˜ต์…˜์˜ ์ฐจ์ด์  ๋ฐ ์‚ฌ์šฉ ์‚ฌ๋ก€

  • CASCADE: ๊ณ„์ธต์  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณ ๊ฐ์„ ์‚ญ์ œํ•˜๋ฉด ํ•ด๋‹น ๊ณ ๊ฐ์˜ ์ฃผ๋ฌธ๋„ ๋ชจ๋‘ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • SET NULL: ๊ด€๊ณ„๊ฐ€ ๋Š์–ด์กŒ์Œ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณ ๊ฐ์„ ์‚ญ์ œํ•˜๋ฉด ํ•ด๋‹น ์ฃผ๋ฌธ์˜ ๊ณ ๊ฐ ID๋ฅผ NULL๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • RESTRICT: ์ค‘์š”ํ•œ ์ฐธ์กฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ˆ˜๋กœ ์‚ญ์ œํ•˜์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • NO ACTION: ๋ณต์žกํ•œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ์‹œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์ดํ•ดํ•˜๊ธฐ

-- CASCADE ์˜ˆ์ œ
CREATE TABLE `orders` (
    `id` INT PRIMARY KEY,
    `order_date` DATE,
    `customer_id` INT,
    FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
);
-- SET NULL ์˜ˆ์ œ
CREATE TABLE `orders` (
    `id` INT PRIMARY KEY,
    `order_date` DATE,
    `customer_id` INT,
    FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE SET NULL ON UPDATE SET NULL
);

์‹ค์ „ ์˜ˆ์ œ๐Ÿ’ป

๊ฐ„๋‹จํ•œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ์™ธ๋ž˜ ํ‚ค ์„ค์ • ์˜ˆ์ œ

CREATE TABLE `products` (
    `id` INT PRIMARY KEY,
    `name` VARCHAR(100)
);

CREATE TABLE `orders` (
    `id` INT PRIMARY KEY,
    `order_date` DATE,
    `product_id` INT,
    FOREIGN KEY (`product_id`) REFERENCES `products`(`id`)
);

๋‹ค์–‘ํ•œ ์™ธ๋ž˜ ํ‚ค ์˜ต์…˜์„ ์ ์šฉํ•œ ๋ณต์žกํ•œ ์˜ˆ์ œ

CREATE TABLE `customers` (
    `id` INT PRIMARY KEY,
    `name` VARCHAR(100)
);

CREATE TABLE `orders` (
    `id` INT PRIMARY KEY,
    `order_date` DATE,
    `customer_id` INT,
    FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE SET NULL ON UPDATE CASCADE
);

์™ธ๋ž˜ ํ‚ค ์„ค์ • ํ›„ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…, ์‚ญ์ œ, ์—…๋ฐ์ดํŠธ ์‹œ์˜ ๋™์ž‘ ํ™•์ธ

-- ๊ณ ๊ฐ ๋ฐ ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
INSERT INTO `customers` (`id`, `name`) VALUES (1, 'John Doe');
INSERT INTO `orders` (`id`, `order_date`, `customer_id`) VALUES (1, '2023-01-01', 1);

-- ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ
UPDATE `customers` SET `id` = 2 WHERE `id` = 1;

-- ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ ํ™•์ธ
SELECT * FROM `orders`; -- customer_id๊ฐ€ 2๋กœ ์—…๋ฐ์ดํŠธ๋จ

-- ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
DELETE FROM `customers` WHERE `id` = 2;

-- ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ ํ™•์ธ
SELECT * FROM `orders`; -- customer_id๊ฐ€ NULL๋กœ ์„ค์ •๋จ

์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ๊ด€๋ฆฌ๐Ÿ› ๏ธ

์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ์ˆ˜์ • ๋ฐ ์‚ญ์ œ ๋ฐฉ๋ฒ•

-- ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ์‚ญ์ œ
ALTER TABLE `orders` DROP FOREIGN KEY `orders_ibfk_1`;

-- ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ์ˆ˜์ •
ALTER TABLE `orders` ADD CONSTRAINT `fk_customer_id` FOREIGN KEY (`customer_id`) REFERENCES customers(`id`) ON DELETE CASCADE;

์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ํ™•์ธ ๋ฐ ๋””๋ฒ„๊น… ํŒ

-- ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ํ™•์ธ
SHOW CREATE TABLE `orders`;

-- ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ๋””๋ฒ„๊น…
-- ๊ด€๋ จ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ํ™•์ธ
-- ์™ธ๋ž˜ ํ‚ค ์„ค์ •์„ ์ž˜๋ชปํ•œ ๋ถ€๋ถ„์„ ์ˆ˜์ •

์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์™ธ๋ž˜ ํ‚ค ๊ด€๋ฆฌ ์š”๋ น

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

๐Ÿ™Œ์—ฌ๊ธฐ์„œ ์ž ๊น! ์ธ๋ฑ์Šค ์ถ”๊ฐ€, ํ™•์ธํ•ด ๋ณด๊ธฐ!

MariaDB์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

CREATE INDEX `์ธ๋ฑ์Šค๋ช…` ON `ํ…Œ์ด๋ธ”๋ช…`(`์ปฌ๋Ÿผ๋ช…`);


์˜ˆ๋ฅผ ๋“ค์–ด, orders ํ…Œ์ด๋ธ”์—์„œ customer_id ์นผ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

CREATE INDEX `idx_customer_id` ON `orders`(`customer_id`);


์ธ๋ฑ์Šค๊ฐ€ ์ž˜ ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ orders ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ชจ๋“  ์ธ๋ฑ์Šค๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

SHOW INDEX FROM `orders`;

์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๐Ÿ”

์™ธ๋ž˜ ํ‚ค ๊ด€๋ จ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ๊ทธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • Error 1452: Cannot add or update a child row: ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์— ์ฐธ์กฐ๋˜๋Š” ํ‚ค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์— ํ•ด๋‹น ํ‚ค๋ฅผ ๋จผ์ € ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • Error 1451: Cannot delete or update a parent row: ์ž์‹ ํ…Œ์ด๋ธ”์—์„œ ์ฐธ์กฐ ์ค‘์ธ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ ๋˜๋Š” ์—…๋ฐ์ดํŠธํ•˜๋ ค ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ž˜ ํ‚ค ์„ค์ • ์‹œ ํ”ํžˆ ์ €์ง€๋ฅด๋Š” ์‹ค์ˆ˜์™€ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•

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

ํ•ต์‹ฌ ๋‚ด์šฉ๐Ÿ‘€

maraidb ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด

728x90
๋ฐ˜์‘ํ˜•