SQL Table, constraints
[Database] SQL์ ๊ธฐ๋ณธ ๊ฐ๋
๊ณผ DB๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ SQL ๊ธฐ๋ณธ ๋ฌธ๋ฒ
SQL ๊ธฐ๋ณธ ๊ฐ๋
์๋ฏธ
Structured Query Language
ํ์ ์์ ์ฐ์ด๋ relational DBMS์ ํ์ค์ธ์ด
์ข ํฉ์ ์ธ database ์ธ์ด : DDL + DML + VDL
์ฃผ์ ์ฉ์ด
relational data model ์ ๋น๊ต
relation
table
attribute
column
tuple
row
domain
domain
relational data model ์ฉ์ด์ SQL ์ฉ์ด๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ํผ์ฉํด์ ์ฌ์ฉํ๊ธฐ๋ ํจ
SQL์์ relation์ด๋?
multiset of tuples
relational data model์๋ ๋ค๋ฅด๊ฒ ์ค๋ณต๋ tuple์ ํ์ฉํจ
SQL๊ณผ RDBMS
SQL์ RDBMS์ ํ์ค ์ธ์ด์ด์ง๋ง, ์ค์ ๊ตฌํ์ ๊ฐ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ , RDBMS๋ง๋ค ์ ๊ณตํ๋ SQL์ ์คํ์ด๋ ๋ฌธ๋ฒ์ด ์กฐ๊ธ์ฉ ๋ค๋ฆ
์์ ๋ฅผ ํตํ SQL๋ก DB ์ ์ํ๊ธฐ
ITํ์ฌ ๊ด๋ จ RDB ๋ง๋ค๊ธฐ ๋ถ์, ์ฌ์, ํ๋ก์ ํธ ๊ด๋ จ ์ ๋ณด๋ค์ ์ ์ฅํ ์ ์๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค MySQL(InnoDB)๋ฅผ ์ฌ์ฉํจ
database ์ ์ํ๊ธฐ
database์ ๋ชฉ๋ก ๋ณด๊ธฐ
database ๋ง๋ค๊ธฐ
ํ์ฌ ์ฌ์ฉํ๊ณ ์๋(์ ํ๋) ๋ฐ์ดํฐ๋ฒ ์ด์คํ์ธ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญ์
DATABASE vs SCHEMA
MySQL์์๋ DATABASE์ SCHEMA๊ฐ ๊ฐ์ ๋ป์ ์๋ฏธํจ
CREATE DATABASE companey=CREATE SCHEMA company๋ค๋ฅธ RDBMS์์๋ ์๋ฏธ๊ฐ ๋ค๋ฅด๊ฒ ์ฐ์ (PostgreSQL์์๋ SCHEMA๊ฐ DATABASE์ namespace๋ฅผ ์๋ฏธํจ)
table ๋ง๋ค๊ธฐ
ITํ์ฌ RDB ๋ง๋ค๊ธฐ ๋ถ์, ์ฌ์, ํ๋ก์ ํธ ๊ด๋ จ ์ ๋ณด๋ค์ ์ ์ฅํ ์ ์๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค๊ธฐ
SCHEMA ์ ์

table ์์ฑ ์ฟผ๋ฆฌ
CREATE TABLE < table_name >
๊ดํธ() ์์์ ์ฝค๋ง, ๋ก ๊ตฌ๋ถํ์ฌ attribute๋ฅผ ์ค์ ํด์ค
attribute๋ < ์ด๋ฆ > < ๋ฐ์ดํฐ ํ์ > < constraints(์ ์ฝ์ฌํญ) > ์ ์์๋๋ก ์
๊ดํธ()๊ฐ ๋๋๋ฉด ์ธ๋ฏธ์ฝ๋ก ; ์ผ๋ก ๋ง๋ฌด๋ฆฌํจ
DEPARTMENT table
EMPLOYEE table
PROJECT table
WORKS_ON table
Atrribute ์ ์
Data type
RDBMS๋ง๋ค ์กฐ๊ธ์ฉ ๋ค๋ฆ. ์ฌ์ฉํ๋ RDBMS์ ๋ฐ๋ผ docs ํ์ธํ๊ธฐ
์ซ์

๋ฌธ์์ด

์๊ฐ

๊ธฐํ

Constraints
Key constraints
PRIMARY KEY
table์ tuple์ ์๋ณํ๊ธฐ ์ํด ์ฌ์ฉ
ํ๋ ์ด์์ attribute(s)๋ก ๊ตฌ์ฑ๋จ
์ค๋ณต๋ ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, NULL ๋ ๊ฐ์ง ์ ์์ (UNIQUE NOT NULL)
์ ์ธ ๋ฐฉ๋ฒ
ํ๋์ผ ๋
ํ๋ ์ด์์ผ ๋
UNIQUE
ํด๋น atrribute๋ ์ค๋ณต๊ฐ์ ๊ฐ์ง ์ ์์
๋จ, NULL์ ์ค๋ณต์ ํ์ฉํ ์๋ ์์(RDBMS ๋ง๋ค ๋ค๋ฆ)
์ ์ธ ๋ฐฉ๋ฒ : PRIMARY KEY ์ฒ๋ผ ํ๋์ผ๋๋ ํ๋ ์ด์์ผ ๋ ๋ฐฉ๋ฒ ๋ ๋ค ํ ์ ์์
NOT NULL๊ณผ ๊ฐ์ด ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
NOT NULL
ํด๋น atrribute๋ NULL์ ๊ฐ์ผ๋ก ๊ฐ์ง ์ ์์
์ ์ธ ๋ฐฉ๋ฒ : attribute level๋ก๋ง ์ ์ธ ๊ฐ๋ฅ.
DEFAULT
๊ธฐ๋ณธ ๊ฐ์ ์ค์ ํจ
ํํ์ ์์ฑํ ๋ ํด๋น attribute์ ๊ฐ์ ์ค์ ํ์ง ์์ผ๋ฉด, ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋จ
CHECK constraint
attribute์ ๊ฐ์ ์ ํํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
์ต์๊ฐ, ์ต๋๊ฐ ๋ฑ์ ์ค์ ํ ์ ์์
์ ์ธ ๋ฐฉ๋ฒ
ํ๋์ผ ๋ : attribute line์์ ์ค์ ๊ฐ๋ฅ
ํ๋ ์ด์์ผ ๋ : ๋งจ ๋ฐ์์ ๋ฌถ์ด์ ์ค์ ๊ฐ๋ฅ
FOREIGN KEY(Referential integrity constraint)
๋ค๋ฅธ table์ primary key๋ unique key๋ฅผ ์ฐธ์กฐํ ๋ ์ฌ์ฉ
FK์ ๊ฐ์ ์ฐธ์กฐํ๋ PK(or unique key)์ ์๋ ๊ฐ์ด์ด์ผ ํจ
์ ์ธ ๋ฐฉ๋ฒ
reference_option(sql ํ์ค ์คํ)
option์ค๋ชCASCADE
์ฐธ์กฐ ๊ฐ์ ์ญ์ /๋ณ๊ฒฝ์ ๊ทธ๋๋ก ๋ฐ์(์ญ์ ๋๋ฉด ํํ์ด ํต์ฑ๋ก ์ญ์ ๋๊ณ , ์์ ๋๋ฉด ๊ฐ์ด ์์ ๋จ
SET NULL
์ฐธ์กฐ ๊ฐ์ด ์ญ์ /๋ณ๊ฒฝ ์ NULL๋ก ๋ณ๊ฒฝ
RESTRICT
์ฐธ์กฐ ๊ฐ์ด ์ญ์ /๋ณ๊ฒฝ๋๋ ๊ฒ์ ๊ธ์ง
NO ACTION
RESTRICT์ ์ ์ฌ(ํ ํธ๋์ ์ ๋ด์์๋ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ์ธ์ , ํธ๋์ ์ ๋๋ฌ์ ๋ ๋ณ๊ฒฝ๋ ์ํ๋ก ๋๋๋ฉด RESTRICT์ฒ๋ผ ๋์
SET DEFAULT
์ฐธ์กฐ ๊ฐ์ด ์ญ์ /๋ณ๊ฒฝ ์ default ๊ฐ์ผ๋ก ๋ณ๊ฒฝ
MySQL์์๋ ์ ์ธ๊ฐ๋ง ์ง์ํจ
PostgreSQL๋ 5๊ฐ ๋ค ์ง์ํจ
constraint ์ด๋ฆ ๋ช
์ํ๊ธฐ
์๋ฐํ์ ๋ ์ค์ ํ ์ด๋ฆ์ ์ถ๋ ฅํด์ค. ์ง๊ด์ ์ผ๋ก ์ด๋ค constraint์ธ์ง ์๋ ค์ค ์ ์์ด์ ์ข์
์ถ๋ ฅ :
Check constraint 'age_over_20' is violated์ค์ ์ํ๋ฉด :
Check constraint 'test_chk_1' is violated
schema ๋ณ๊ฒฝํ๊ธฐ ALTER TABLE
๋ฌธ๋ฒ
ALTER TABLE <ํ ์ด๋ธ๋ช > <๋ญํด์ค์ง>์ฌ์ฉํ๋ ค๋ RDBMS์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ ๊ฒ
ํ
์ด๋ธ ์ญ์
๋ฌธ๋ฒ
DROP TABLE <ํ ์ด๋ธ ๋ช >DROP TABLE table_name
์ฃผ์์ฌํญ
์ด๋ฏธ ์๋น์ค ์ค์ธ table์ schema๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ผ๋ฉด, ๋ณ๊ฒฝ ์์ ๋๋ฌธ์ ์๋น์ค์ ๋ฐฑ์๋์ ์ํฅ์ด ์์์ง ์ถฉ๋ถํ ๊ฒํ ํ ํ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ค์
๋ง๋ค๋ ค๋ ์๋น์ค์ ์คํ๊ณผ ๋ฐ์ดํฐ ์ผ๊ด์ฑ, ํธ์์ฑ, ํ์ ์ฑ ๋ฑ์ ์ข ํฉ์ ์ผ๋ก ๊ณ ๋ คํ์ฌ DB ์คํค๋ง๋ฅผ ์ ์ ํ๊ฒ ์ ์ํ๋ ๊ฒ์ด ์ค์. SQL๋ฌธ์ ๋ฌดํฑ๋๋ก ๋ง ์ค๊ณํ๋ค๊ฐ ํฐ์ฝ๋ค์ณ~
์ฐธ๊ณ
Last updated