๐Ÿ–ฅ๏ธ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์šฉ์–ด ๋ฐ ํ…Œ์ด๋ธ”์ƒ์„ฑ(22.10.26์ˆ˜์—…)

๋ฆฌ์•ˆ๐Ÿคยท2023๋…„ 1์›” 12์ผ

๐Ÿ“Œ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ•„์ˆ˜ ์šฉ์–ด

  • DBMS : Database Management System(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ)์˜ ์•ฝ
    ์ž๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ. DBMS์˜ ์ข…๋ฅ˜๋กœ Oracle, MySQL, SQL Server, MariaDB ๋“ฑ์ด ์žˆ์Œ.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB) : ์กฐ์งํ™”๋œ ์ •๋ณด๋“ค์˜ ๋ชจ์Œ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์•ผ ํ•จ
  • ๊ฐ์ฒด(Object) : ์‚ฌ๋žŒ, ์‚ฌ๋ฌผ, ์žฅ์†Œ, ๊ฐœ๋…, ์‚ฌ๊ฑด๊ณผ ๊ฐ™์€ ์œ ๋ฌดํ˜•์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ
    ๋Š” ๋…๋ฆฝ์ ์ธ ์‹ค์ฒด. ๊ฐ์ฒด ์ข…๋ฅ˜๋Š” ํ…Œ์ด๋ธ”, ๋ทฐ, ์ธ๋ฑ์Šค ๋“ฑ์ด ์žˆ์Œ. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋Š” ํ…Œ์ด๋ธ”์ž„.
  • ํ…Œ์ด๋ธ”(Table) : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ
    ์ฒด ์œ ํ˜•. ์—ด(column)๊ณผ ํ–‰(row)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Œ.
  • ๋ฐ์ดํ„ฐ(data) : ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ ๊ฐ์ฒด์— ์ €์žฅ๋œ ์‹ค์ œ ์ •๋ณด๋ฅผ ์˜๋ฏธํ•จ.
  • ์—ด(column) : ์ปฌ๋Ÿผ ๋˜๋Š” ์†์„ฑ(Attribute)์ด๋ผ๊ณ ๋„ ํ•จ. ํ…Œ์ด๋ธ”์—์„œ ์„ธ๋กœ ๋ถ€๋ถ„์„ ์˜๋ฏธํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์—ด
    (column)์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ.
  • ์—ด ์ด๋ฆ„(column name) : ๊ฐ ์—ด(column)์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฆ„. ์—ด์ด๋ฆ„ ๋˜๋Š” ์ปฌ๋Ÿผ๋ช…์€ ํ…Œ์ด๋ธ” ๋‚ด์—์„œ ๊ณ ์œ ํ•ด์•ผ ํ•จ.
  • ํ–‰(row) : ์šฐ ๋˜๋Š” ๋ ˆ์ฝ”๋“œ๋ผ๊ณ ๋„ ํ•จ. ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€๋กœ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ์˜๋ฏธํ•จ.
  • SQL : ์‚ฌ๋žŒ๊ณผ DBMS๊ฐ€ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด.
  • ๊ธฐ๋ณธํ‚ค(Primary key) : ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ๊ตฌ๋ถ„ํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ ์ปฌ๋Ÿผ์—๊ฒŒ ๋ถ€์—ฌํ•˜๋Š” ์ œ์•ฝ
    ์กฐ๊ฑด. ๊ธฐ๋ณธํ‚ค๊ฐ€ ์„ค์ •๋œ ์ปฌ๋Ÿผ์—๋Š” ์ค‘๋ณต๊ฐ’, ๋นˆ๊ฐ’ ๋“ค์–ด์˜ฌ ์ˆ˜ ์—†์Œ.
  • ์™ธ๋ž˜ํ‚ค(Foreign key) : ํ…Œ์ด๋ธ”๊ณผ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ์ œ์•ฝ์กฐ๊ฑด.
  • ์Šคํ‚ค๋งˆ(Schema) : DBMS๋“ค๋งˆ๋‹ค ์Šคํ‚ค๋งˆ์˜ ์˜๋ฏธ๋Š” ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Œ. ์Šคํ‚ค๋งˆ๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๊ทธ๋ฆ‡์„ ์˜๋ฏธํ•จ. MySQL โ€“ ์Šคํ‚ค๋งˆ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋™์ผํ•œ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋จ. Oracle โ€“ ์Šคํ‚ค๋งˆ๊ฐ€ ์œ ์ €์™€ ๋™์ผํ•œ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋จ

๐Ÿ“Œ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์ถ• ์ ˆ์ฐจ


1. DB์ƒ์„ฑ
2. Table ์ƒ์„ฑ
3. ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์ˆ˜์ •/์‚ญ์ œ
4. ๋ฐ์ดํ„ฐ ์กฐํšŒ


๐Ÿ“Œ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํ…Œ์ด๋ธ” ์ƒ์„ฑ

1.๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ
1) Workbench ์‹คํ–‰ ํ›„ MySQL์— root ์‚ฌ์šฉ์ž๋กœ ์ ‘์†
2) โ€˜์‡ผํ•‘๋ชฐโ€™ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ
- Schema ์ด๋ฆ„ : db

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(์Šคํ‚ค๋งˆ)๋ช…, ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ๋ช… ๋“ฑ์€ ์˜๋ฌธ์„ ์‚ฌ์šฉ
- ์ด๋ฆ„์€ ์˜๋ฌธ์œผ๋กœ ์‹œ์ž‘ํ•ด์•ผํ•˜๋ฉฐ, ์˜๋ฌธ/์ˆซ์ž/ํŠน์ˆ˜๋ฌธ์ž(_, #, $)๊ฐ€ ํ˜ผํ•ฉ๋  ์ˆ˜๋Š” ์žˆ๋‹ค.
- ์‹ค๋ฌด์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช…, ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ๋ช… ๋“ฑ์„ ํ•œ๊ธ€๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์œผ๋ฉฐ, ๊ทธ ์ด์œ ๋Š” ํ˜ธํ™˜์„ฑ ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ๋  ์†Œ์ง€๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ
- ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ์˜๋ฌธ, ํ•œ๊ธ€ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

2. ํ…Œ์ด๋ธ” ์ƒ์„ฑ

1) ๋ฐ์ดํ„ฐ ํƒ€์ž…

- ์ฃผ๋ฏผ๋ฒˆํ˜ธ๋Š” ๋ฌธ์ž ๋ฐ์ดํ„ฐํƒ€์ž…์ด๋‹ค. ์ˆซ์žX
- CHAR : ๊ณ ์ •, ์„ฑ๋Šฅ์šฐ์ˆ˜ but ๊ณต๊ฐ„์  ํšจ์œจ ๋–จ์–ด์ง(์ฃผ๋ฏผ๋ฒˆํ˜ธ/์ „ํ™”๋ฒˆํ˜ธ)
- VARCHAR : ๊ฐ€๋ณ€, ๊ณต๊ฐ„ํšจ์œจ ๋†’๋‹ค but ์„ฑ๋Šฅ ๋‚ฎ์Œ
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย -> ํ†ต์ƒ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค
2)์ œ์•ฝ์กฐ๊ฑด

  • not null - null๊ฐ’์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๋ง‰์•„์ฃผ๋Š” ์ œ์•ฝ์กฐ๊ฑด, ํ•„์ˆ˜ ์ปฌ๋Ÿผ์— ๋งŽ์ด ์„ ์–ธํ•จ.
    ์˜ˆ) ์ด๋ฆ„, ํ•™๋ฒˆ, ์‚ฌ๋ฒˆ, ์ฃผ๋ฏผ๋ฒˆํ˜ธ, ์ „ํ™”๋ฒˆํ˜ธ ๋“ฑ
  • unique - ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๋ง‰์•„์ฃผ๋Š” ์ œ์•ฝ์กฐ๊ฑด
    ์˜ˆ) ํ•™๋ฒˆ, ์‚ฌ๋ฒˆ, ์ฃผ๋ฏผ๋ฒˆํ˜ธ, ์ „ํ™”๋ฒˆํ˜ธ, ์ด๋ฉ”์ผ ๋“ฑ
  • primary key - ๊ธฐ๋ณธํ‚ค, not null + unique์˜ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง, ํ…Œ์ด๋ธ” ๋‹น ํ•œ๋ฒˆ๋งŒ ์„ ์–ธ ๊ฐ€๋Šฅํ•จ.
    => ์œ ์ถœ๋˜์–ด๋„ ํฐ ๋ฌธ์ œ๊ฐ€ ์—†์„ ๋งŒํ•œ ๊ณณ์— ์ฃผ๋กœ ์”€
    ์˜ˆ) ํ•™๋ฒˆ, ์‚ฌ๋ฒˆ, ์ œํ’ˆ๋ฒˆํ˜ธ, ์ฃผ๋ฌธ๋ฒˆํ˜ธ ๋“ฑ
  • Foreign key - ์™ธ๋ž˜ํ‚ค, ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์ปฌ๋Ÿผ์„ ์ฐธ์กฐํ•˜๋Š” ์ œ์•ฝ์กฐ๊ฑด, ์ž์‹ ์ปฌ๋Ÿผ(fk์„ ์–ธ๋œ ์ปฌ๋Ÿผ)์—๋Š” ๋ถ€๋ชจ ์ปฌ๋Ÿผ(์ฐธ์กฐํ•˜๋Š” ์ปฌ๋Ÿผ)์— ์žˆ๋Š” ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฝ์ž…/์ˆ˜์ •๋  ์ˆ˜ ์žˆ์Œ.
  • check - ํ•ด๋‹น ์ปฌ๋Ÿผ์ด ๋งŒ์กฑํ•ด์•ผํ•˜๋Š” ์กฐ๊ฑด๋ฌธ์„ ์ž์œ ๋กญ๊ฒŒ ์ง€์ •ํ•˜๋Š” ์ œ์•ฝ์กฐ๊ฑด
    ์˜ˆ) grade int(10) check(grade >= 1 and grade <=3)
    ์˜ˆ2) salary bigint check(salary >0)
    ์˜ˆ3) ์ฃผ๋ฏผ๋ฒˆํ˜ธ char(13) check(length(์ฃผ๋ฏผ๋ฒˆํ˜ธ) = 13)

3) ํ…Œ์ด๋ธ” ์ฐจํŠธ ๋ฐ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ž‘์—…

  • members ํ…Œ์ด๋ธ” ์ƒ์„ฑ
create table members
(member_id int primary key,
member_name varchar(8) not null,
birth date not null,
job varchar(20),
phone varchar(20) unique,
address varchar(80));

  • ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ” ํ™•์ธ
  • products ํ…Œ์ด๋ธ” ์ƒ์„ฑ
create table products
(prod_id int primary key,
prod_name varchar(20) not null,
price int check (price>0),
make_date date,
company varchar(10) not null);
  • ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ” ํ™•์ธ
  • orders ํ…Œ์ด๋ธ” ์ƒ์„ฑ
create table orders
(order_num int,
member_id int,
prod_id int,
order_date datetime default now(),
primary key(order_num),
foreign key(member_id) references members(member_id),
foreign key(prod_id) references products(prod_id) );

- ๋ฌธ๋ฒ•
order_num int, : ์ปฌ๋Ÿผ๋ ˆ๋ฒจ๋ฌธ๋ฒ•(nn, pk,,,)
primary key(order_num) : ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ๋ฌธ๋ฒ•(fk)
- ๋ช…๋ น์–ด
* from dual; : dual์€ ๋”ฐ๋กœ ์ž‘์„ฑ ๋œ ํ…Œ์ด๋ธ”์ด ์—†์„ ๋•Œ ์ž„์˜๋กœ ํ…Œ์ด๋ธ” ๋ณด์—ฌ์คŒ
ex) select now()
ย ย ย ย ย from dual;
-> ํ˜„์žฌ ๋‚ ์งœ ์‹œ๊ฐ„์ด ๋‚˜์˜ด(2022-10-27 10:39:33)
* references - ์ฐธ์กฐ

  • ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ” ํ™•์ธ
  • stu20 ํ…Œ์ด๋ธ” ์ƒ์„ฑ
create table stu20
(stu_id int auto_increment primary key,
stu_name varchar(5) not null,
age int check (age > 19));

- auto increment ์†์„ฑ
1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์„ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ์†์„ฑ
๋‹จ, ์ˆซ์ž ํ˜•์‹์˜ ์นผ๋Ÿผ์ด๋ฉด์„œ primary key ๋˜๋Š” unique ์ œ์•ฝ์กฐ๊ฑด์ด ์„ ์–ธ๋œ ์ปฌ๋Ÿผ์—๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•จ.
์‹œ์ž‘๊ฐ’, ์ฆ๊ฐ€๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•จ.
[๋ฌธ๋ฒ•] create table
ย ย ย ย ย ย ย ย (์ปฌ๋Ÿผ๋ช…1 int auto_increment primary key,
ย ย ย ย ย ย ย ย ย ์ปฌ๋Ÿผ๋ช…2 varchar(10));

  • ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ” ํ™•์ธ

๐Ÿ“Œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

1. ๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด(DML : Data Manipulation Language)
- insert : ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
- update : ๋ฐ์ดํ„ฐ ์ˆ˜์ •
- delete : ๋ฐ์ดํ„ฐ ์‚ญ์ œ

2. ๋ฐ์ดํ„ฐ ์‚ฝ์ž… : INSERT
- [๋ฌธ๋ฒ•] inser into ํ…Œ์ด๋ธ”๋ช…[(์ปฌ๋Ÿผ๋ช…1, ์ปฌ๋Ÿผ๋ช…2, ์ปฌ๋Ÿผ๋ช…3, ...)]->[]์ƒ๋žต๊ฐ€๋Šฅ
ย ย ย ย ย ย ย ย ย ย ย values (๊ฐ’1, ๊ฐ’2, ๊ฐ’3, ๊ฐ’4, ...)

- ํ…Œ์ด๋ธ”๋ช… ๋’ค์— ์ปฌ๋Ÿผ๋ช…์„ ์ž‘์„ฑํ•œ ๊ฒฝ์šฐ
=> values์ ˆ์— ๊ฐ’๋ฆฌ์ŠคํŠธ ์ž‘์„ฑ ์‹œ ์ž‘์„ฑ๋œ ์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ์™€ ์ผ์น˜๋˜์•ผํ•จ.
ex) insert into members(member_id, member_name, birth, phone)
ย ย ย ย ย values (101, '๊น€๋ฏผ์ˆ˜', '1990-03-05', '010-2222-2222');
- ์ƒ๋žต๋œ ์ปฌ๋Ÿผ์—๋Š” null๊ฐ’ ์ž๋™ ์‚ฝ์ž…๋จ.
- not null ์ œ์•ฝ์กฐ๊ฑด์ด ์„ ์–ธ๋œ ์ปฌ๋Ÿผ์ด ์ƒ๋žต๋œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒํ•จ.
ex) birth ๋“ฑ,,,
- table ๋’ค์— ์ปฌ๋Ÿผ๋ช…์ด ๋‚˜์—ด๋˜์–ด ์žˆ์„ ๋•Œ๋Š” ๊ผญ ์ˆœ์„œ๋Œ€๋กœ ์•ˆ ์ ์–ด๋„ ๋จ

<โœ๏ธ members ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…ํ•˜๊ธฐ>

-> ์ˆœ์„œ๋Œ€๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ž…๋ ฅํ•˜์—ฌ ์‚ฝ์ž…

-> ์ž‘์„ฑํ•œ ์ปฌ๋Ÿผ๋ช…์— ๋งž์ถฐ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ, ์ƒ๋žต๋œ ์ปฌ๋Ÿผ์—๋Š” null๊ฐ’ ์ž๋™ ์ž…๋ ฅ

-> not null ์ œ์•ฝ์กฐ๊ฑด์ด ์„ ์–ธ๋œ birth์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ์ƒ๋žตํ•˜์—ฌ (Error Code: 1364. Field 'birth' doesn't have a default value)์˜ค๋ฅ˜ ๋ฐœ์ƒ

=> ์ˆ˜์ •!!

-> unique ์ œ์•ฝ์กฐ๊ฑด์ด ์„ ์–ธ๋œ phone ์ปฌ๋Ÿผ์— ์ค‘๋ณต ๊ฐ’์ด ์‚ฝ์ž…๋œ ๊ฒฝ์šฐ (Error Code: 1062. Duplicate entry '010-1111-1111' for key 'phoneโ€™)์˜ค๋ฅ˜๋ฐœ์ƒ.

=> ์ˆ˜์ •!!

-> primary key ์ œ์•ฝ์กฐ๊ฑด์ด ์„ ์–ธ๋œ member_id์ปฌ๋Ÿผ์— ์ค‘๋ณต ๊ฐ’์ด ์‚ฝ์ž…๋œ ๊ฒฝ์šฐ (Error Code: 1062. Duplicate entry '101' for key 'PRIMARYโ€™)์˜ค๋ฅ˜๋ฐœ์ƒ.

=> ์ˆ˜์ •!!
๋‹จ, unique ์ œ์•ฝ์กฐ๊ฑด์ด ์„ ์–ธ๋œ ์ปฌ๋Ÿผ์— null๊ฐ’์€ ํ—ˆ์šฉํ•จ


-> primary key ์ œ์•ฝ์กฐ๊ฑด์ด ์„ ์–ธ๋œ member_id์ปฌ๋Ÿผ์— null๊ฐ’์ด ์‚ฝ์ž…๋œ ๊ฒฝ์šฐ (Error Code: 1364. Field 'member_id' doesn't have a default value)์˜ค๋ฅ˜๋ฐœ์ƒ.


=> ์ˆ˜์ •!!

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