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

[DBMS]MariaDB์—์„œ์˜ ์ œ์•ฝ ์กฐ๊ฑด: ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ํ•ต์‹ฌ

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

์ œ์•ฝ ์กฐ๊ฑด(Constraints)์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ํŠน์ • ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‚ฝ์ž…๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ์ •ํ™•์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. MariaDB ์—ญ์‹œ ๋‹ค์–‘ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ œ๊ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.

mariadb ์ œ์•ฝ ์กฐ๊ฑด

MariaDB์—์„œ ์ง€์›ํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด ์ข…๋ฅ˜๐Ÿ”‘

์ œ์•ฝ ์กฐ๊ฑด์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ์ ์šฉ๋˜๋Š” ๊ทœ์น™์œผ๋กœ, ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํŠน์ • ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์€ ํ…Œ์ด๋ธ” ์ˆ˜์ค€์—์„œ ์ •์˜๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  1. NOT NULL ์ œ์•ฝ ์กฐ๊ฑด: ํ•ด๋‹น ์—ด์˜ ๊ฐ’์ด NULL์ด ์•„๋‹ˆ์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  2. PRIMARY KEY ์ œ์•ฝ ์กฐ๊ฑด: ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์œ ์ผํ•œ ๊ฐ’์œผ๋กœ, ์ค‘๋ณต๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. FOREIGN KEY ์ œ์•ฝ ์กฐ๊ฑด: ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  4. UNIQUE ์ œ์•ฝ ์กฐ๊ฑด: ํ•ด๋‹น ์—ด์˜ ๊ฐ’์ด ๋ชจ๋‘ ๊ณ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  5. CHECK ์ œ์•ฝ ์กฐ๊ฑด: ํŠน์ • ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

MariaDB ํ…Œ์ด๋ธ”์— ๊ด€ํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”๐Ÿ˜

" "

[DBMS]MariaDB SQL์„ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ๊ด€๋ฆฌ: ์ƒ์„ฑ, ์ •๋ณด ์กฐํšŒ, ์ˆ˜์ •, ์กฐํšŒ ๋ฐ ์‚ญ์ œ ๋ฐฉ๋ฒ•

MariaDB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ SQL ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ CREATE TABLE ๋ฌธ๋ถ€ํ„ฐ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ •ํ•˜๋Š” ALTER ๋ฌธ๊นŒ์ง€ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.โ‰ฃ ๋ชฉ์ฐจํ…Œ

creativevista.tistory.com

๊ฐ ์ œ์•ฝ ์กฐ๊ฑด์˜ ์„ค๋ช…๊ณผ ํ™œ์šฉ ์˜ˆ์‹œ๐Ÿ›‘

  • NOT NULL: ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์˜ ์ฃผ๋ฌธ ์ผ์ž๋Š” ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์˜ order_date ์—ด์— NOT NULL ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์—ฌ ๋ชจ๋“  ์ฃผ๋ฌธ์€ ๋ฐ˜๋“œ์‹œ ์ฃผ๋ฌธ ์ผ์ž๋ฅผ ๊ฐ–๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_date DATE NOT NULL,
    customer_id INT
);
  • PRIMARY KEY: ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์˜ ์‚ฌ์šฉ์ž ID๋Š” ๊ฐ ์‚ฌ์šฉ์ž๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์˜ user_id ์—ด์„ PRIMARY KEY๋กœ ์ง€์ •ํ•˜์—ฌ ๊ฐ ์‚ฌ์šฉ์ž๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(100) UNIQUE
);
  • FOREIGN KEY: ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์˜ ๊ณ ๊ฐ ID๋Š” ๊ณ ๊ฐ ํ…Œ์ด๋ธ”์˜ ๊ณ ๊ฐ ID์™€ ๊ด€๊ณ„๋ฅผ ๋งบ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์˜ customer_id ์—ด์— FOREIGN KEY ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์—ฌ ๊ณ ๊ฐ ํ…Œ์ด๋ธ”์˜ ๊ณ ๊ฐ ID๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_date DATE,
    customer_id INT,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
  • UNIQUE: ์ด๋ฉ”์ผ ์ฃผ์†Œ๊ฐ€ ์œ ์ผํ•ด์•ผ ํ•˜๋Š” ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์˜ ์ด๋ฉ”์ผ ์—ด์— ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์˜ email ์—ด์— UNIQUE ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์—ฌ ๊ฐ ์ด๋ฉ”์ผ ์ฃผ์†Œ๊ฐ€ ์œ ์ผํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) UNIQUE,
    email VARCHAR(100) UNIQUE
);
  • CHECK: ๋‚˜์ด ์—ด์ด 18์„ธ ์ด์ƒ์ด์–ด์•ผ ํ•˜๋Š” ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์˜ age ์—ด์— CHECK ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์—ฌ ๋‚˜์ด๊ฐ€ 18์„ธ ์ด์ƒ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50),
    age INT CHECK (age >= 18)
);

์ œ์•ฝ ์กฐ๊ฑด์˜ ์„ค์ • ๋ฐ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•๐Ÿ› 

์ œ์•ฝ ์กฐ๊ฑด์€ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ CREATE TABLE ๋ฌธ์„ ํ†ตํ•ด ์„ค์ •๋˜๊ฑฐ๋‚˜, ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์— ALTER TABLE ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ ๋˜๋Š” ์ˆ˜์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ฝ ์กฐ๊ฑด์˜ ์„ค์ •

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    age INT CHECK (age >= 18)
);

์ œ์•ฝ ์กฐ๊ฑด์˜ ๋ณ€๊ฒฝ

ALTER TABLE users
ADD CONSTRAINT age_check CHECK (age >= 21);

์ œ์•ฝ ์กฐ๊ฑด์˜ ๊ด€๋ฆฌ์™€ ์œ ์ง€๐Ÿงน

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

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

MARIADB ์ œ์•ฝ์กฐ๊ฑด

728x90
๋ฐ˜์‘ํ˜•