์ ์ฝ ์กฐ๊ฑด(Constraints)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ค์ํ ๊ฐ๋ ์ ๋๋ค. ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์๋ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ์ ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ์ ํ์ฑ์ ์ ์งํฉ๋๋ค. MariaDB ์ญ์ ๋ค์ํ ์ ์ฝ ์กฐ๊ฑด์ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ์ฑ์ ํ๋ณดํฉ๋๋ค.
โฃ ๋ชฉ์ฐจ
MariaDB์์ ์ง์ํ๋ ์ ์ฝ ์กฐ๊ฑด ์ข ๋ฅ๐
์ ์ฝ ์กฐ๊ฑด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์ ์ฉ๋๋ ๊ท์น์ผ๋ก, ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ์ , ์์ , ์ญ์ ๋๋ ๋ฐ์ดํฐ๊ฐ ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด์ ํ ์ด๋ธ ์์ค์์ ์ ์๋๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
- NOT NULL ์ ์ฝ ์กฐ๊ฑด: ํด๋น ์ด์ ๊ฐ์ด NULL์ด ์๋์ด์ผ ํจ์ ๋ํ๋ ๋๋ค.
- PRIMARY KEY ์ ์ฝ ์กฐ๊ฑด: ํ ์ด๋ธ์ ๊ฐ ํ์ ์๋ณํ๊ธฐ ์ํ ์ ์ผํ ๊ฐ์ผ๋ก, ์ค๋ณต๋์ง ์์์ผ ํฉ๋๋ค.
- FOREIGN KEY ์ ์ฝ ์กฐ๊ฑด: ๋ค๋ฅธ ํ ์ด๋ธ์ ์ธ๋ ํค๋ฅผ ์ฐธ์กฐํ์ฌ ๋ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํฉ๋๋ค.
- UNIQUE ์ ์ฝ ์กฐ๊ฑด: ํด๋น ์ด์ ๊ฐ์ด ๋ชจ๋ ๊ณ ์ ํด์ผ ํฉ๋๋ค.
- CHECK ์ ์ฝ ์กฐ๊ฑด: ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋์ง ๊ฒ์ฌํฉ๋๋ค.
MariaDB ํ ์ด๋ธ์ ๊ดํ ๋ด์ฉ์ ์๋ ํฌ์คํ ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์๐
๊ฐ ์ ์ฝ ์กฐ๊ฑด์ ์ค๋ช ๊ณผ ํ์ฉ ์์๐
- 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);
์ ์ฝ ์กฐ๊ฑด์ ๊ด๋ฆฌ์ ์ ์ง๐งน
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋์์ธ ์์๋ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ์ ์ ์ฝ ์กฐ๊ฑด์ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ์ ์ฝ ์กฐ๊ฑด์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ผ๋ฏ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํฌ๊ธฐ์ ํ๊ฒฝ์ ๋ง๊ฒ ๊ด๋ฆฌ๋์ด์ผ ํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ํด์๋ ์ ์ฝ ์กฐ๊ฑด์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ์ ์งํด์ผ ํฉ๋๋ค.
ํต์ฌ ๋ด์ฉ๐