Day34 Database

์›ฐ์น˜์Šคยท2022๋…„ 12์›” 12์ผ
0

22/12/12

๐Ÿ“Œ 9. ๋ฐ์ดํ„ฐ์ •์˜์–ด(DDL) - Table

  • <SQL๊ตฌ๋ฌธ์˜ ์œ ํ˜•>
    ๋ฐ์ดํ„ฐ์งˆ์˜์–ด(DQL) : select
    ๋ฐ์ดํ„ฐ์กฐ์ž‘์–ด(DML) : insert, update, delete
    ๋ฐ์ดํ„ฐ์ •์˜์–ด(DDL) : create, alter, drop, truncate
    ๋ฐ์ดํ„ฐ์ œ์–ด์–ด(DCL) : grant, revoke
    ํŠธ๋žœ์žญ์…˜์ œ์–ด์–ด(TCL) : commit, rollback, savepoint

๐Ÿ“‚ ํ…Œ์ด๋ธ” ์ƒ์„ฑ : create table

[๋ฌธ๋ฒ•] create table ํ…Œ์ด๋ธ”๋ช…
ย ย ย ย ย ย ย ย (์ปฌ๋Ÿผ๋ช…1 ๋ฐ์ดํ„ฐํƒ€์ž…(์ปฌ๋Ÿผ์‚ฌ์ด์ฆˆ),
ย ย ย ย ย ย ย ย ย ์ปฌ๋Ÿผ๋ช…2 ๋ฐ์ดํ„ฐํƒ€์ž…(์ปฌ๋Ÿผ์‚ฌ์ด์ฆˆ) ์ œ์•ฝ์กฐ๊ฑด,
ย ย ย ย ย ย ย ย ย ์ปฌ๋Ÿผ๋ช…3 ๋ฐ์ดํ„ฐํƒ€์ž…(์ปฌ๋Ÿผ์‚ฌ์ด์ฆˆ) default ๊ธฐ๋ณธ๊ฐ’,
ย ย ย ย ย ย ย ย ย ์ปฌ๋Ÿผ๋ช…4 ๋ฐ์ดํ„ฐํƒ€์ž…(์ปฌ๋Ÿผ์‚ฌ์ด์ฆˆ));

  • ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ๋ช… : ๋ฌธ์ž๋กœ ์‹œ์ž‘, ๋ฌธ์ž/์ˆซ์ž/ํŠน์ˆ˜๋ฌธ์ž(_, #, $๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)ํ˜ผํ•ฉ ๊ฐ€๋Šฅ
  • ๋ฐ์ดํ„ฐํƒ€์ž… - ๋ฌธ์ž : char(๊ณ ์ •), varchar(๊ฐ€๋ณ€)
    ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย  - ์ˆซ์ž - ์ •์ˆ˜ : int, bigint
    ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย - ์‹ค์ˆ˜ : double
    ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย - ๋‚ ์งœ - ๋…„/์›”/์ผ : date
    ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย - ๋…„/์›”/์ผ/์‹œ/๋ถ„/์ดˆ : datetime
  • ์˜ต์…˜ : ์ œ์•ฝ์กฐ๊ฑด, default๊ฐ’

โœ… ํ…Œ์ด๋ธ” ์ƒ์„ฑ

๐Ÿ”ธ default๊ฐ’์ด ํฌํ•จ๋œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ํ™œ์šฉ

create table dept
(deptno int,
 dname varchar(14),
 loc varchar(13),
 create_date datetime default now());
 
 desc dept;

๐Ÿ’ฅ ์ž๋™์ปค๋ฐ‹ ์„ค์ •ํ•˜๊ธฐ : [Query] - [Auto-Commit Transactions] ์ฒดํฌํ•˜๊ธฐ

insert into dept
values (10,'AAA','A100','2022-10-25 13:51:05');

default๊ฐ’์ด ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ปฌ๋Ÿผ์€ ์ƒ๋žต์‹œ null๊ฐ’ ์‚ฝ์ž…๋จ.
default๊ฐ’์ด ์„ ์–ธ๋œ ์ปฌ๋Ÿผ์€ ์ƒ๋žต์‹œ default๊ฐ’ ์‚ฝ์ž…๋จ.

๐Ÿ”ธ ์•”์‹œ์ (์ž๋™)์œผ๋กœ default๊ฐ’ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•

insert into dept(deptno, dname)
values (20,'BBB');

๐Ÿ”ธ ๋ช…์‹œ์ (์ˆ˜๋™)์œผ๋กœ default๊ฐ’ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•

insert into dept
values (30,'CCC','C100',default);

insert into dept
values (40,'DDD','D100',null);

insert into dept
values (50,'EEE',default, default);

update dept
set create_date = default
where deptno = 40;

select*
from dept;

โœ… ์ œ์•ฝ์กฐ๊ฑด : ํ…Œ์ด๋ธ”์— ๋ถ€์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…/์ˆ˜์ •/์‚ญ์ œ๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์คŒ.

  • ์ œ์•ฝ์กฐ๊ฑด ์œ ํ˜• : not null, unique, primary key, foreign key, check
  • ์ œ์•ฝ์กฐ๊ฑด ์„ ์–ธ ์‹œ๊ธฐ : ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ - create table ---;
    ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย  ํ…Œ์ด๋ธ” ์ƒ์„ฑ ํ›„ - alter table ---;
  • ์ œ์•ฝ์กฐ๊ฑด ์„ ์–ธ ๋ฌธ๋ฒ• : ์ปฌ๋Ÿผ ๋ ˆ๋ฒจ ๋ฌธ๋ฒ• - nn, uk, pk, ck
    ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย  ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ ๋ฌธ๋ฒ• - fk, uk, pk, ck

๐Ÿ”ธ [์ œ์•ฝ์กฐ๊ฑด1] not null
ย ย ย ย null๊ฐ’์ด ์‚ฝ์ž…/์ˆ˜์ •๋  ์ˆ˜ ์—†๋Š” ์ œ์•ฝ์กฐ๊ฑด
ย ย ย ย ํ•„์ˆ˜ ์ปฌ๋Ÿผ์— ์„ ์–ธํ•จ.
ย ย ย ย (์˜ˆ) ํšŒ์›๋ช…, ์ง์›์ด๋ฆ„, ์ฃผ๋ฏผ๋ฒˆํ˜ธ, ์ƒ๋…„์›”์ผ, ์ „ํ™”๋ฒˆํ˜ธ ๋“ฑ

create table test1
(id int not null,
 name varchar(30) not null,
 jumin varchar(13) not null,
 job varchar(20),
 email varchar(20),
 phone varchar(20) not null,
 start_date date);
 
desc test1;

๐Ÿ”ธ [์ œ์•ฝ์กฐ๊ฑด2] unique
ย ย ย  ์ค‘๋ณต๊ฐ’์ด ์‚ฝ์ž…/์ˆ˜์ •๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์ฃผ๋Š” ์ œ์•ฝ์กฐ๊ฑด
ย ย ย  (๋‹จ, not null ์ œ์•ฝ์กฐ๊ฑด์ด ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด null๊ฐ’์€ ํ—ˆ์šฉํ•จ)
ย ย ย  ๊ณ ์œ ํ•œ ๊ฐ’์ด ๋“ค์–ด์™€์•ผ ํ•˜๋Š” ์ปฌ๋Ÿผ์— ์‚ฌ์šฉํ•จ.
ย ย ย  (์˜ˆ) ์ฃผ๋ฏผ๋ฒˆํ˜ธ, ์ „ํ™”๋ฒˆํ˜ธ, ๋ฉ”์ผ ๋“ฑ

create table test2
(id int not null unique,
 name varchar(30) not null,
 jumin varchar(13) not null unique,
 job varchar(20),
 email varchar(20) unique,
 phone varchar(20) not null unique,
 start_date date);
 
desc test2;

๐Ÿ”ธ [์ œ์•ฝ์กฐ๊ฑด3] primary key(๊ธฐ๋ณธํ‚ค)
ย ย ย  not null + unique์˜ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ œ์•ฝ์กฐ๊ฑด
ย ย ย  null๊ฐ’ ๋ฐ ์ค‘๋ณต๊ฐ’์ด ์‚ฝ์ž…/์ˆ˜์ •๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์ฃผ๋Š” ์ œ์•ฝ์กฐ๊ฑด
ย ย ย  ๋‹จ, ํ…Œ์ด๋ธ” ๋‹น ํ•œ๋ฒˆ๋งŒ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Œ!!!
ย ย ย  (์˜ˆ) ํ•™๋ฒˆ, ์‚ฌ๋ฒˆ, ํšŒ์›๋ฒˆํ˜ธ, ์ œํ’ˆ๋ฒˆํ˜ธ ๋“ฑ

create table test3
(id int primary key,
 name varchar(30) not null,
 jumin varchar(13) not null unique,
 job varchar(20),
 email varchar(20) unique,
 phone varchar(20) not null unique, 
 start_date date);
 
desc test3;

๐Ÿ”ธ [์ œ์•ฝ์กฐ๊ฑด4] foreign key(์™ธ๋ž˜ํ‚ค)
ย ย ย  ์ž๊ธฐ ์ž์‹  ํ…Œ์ด๋ธ”์ด๋‚˜ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์ปฌ๋Ÿผ์„ ์ฐธ์กฐํ•˜๋Š” ์ œ์•ฝ์กฐ๊ฑด
ย ย ย  FK ์ œ์•ฝ์กฐ๊ฑด์ด ์„ ์–ธ๋œ ์ปฌ๋Ÿผ : ์ž์‹์ปฌ๋Ÿผ
ย ย ย  FK ์ œ์•ฝ์กฐ๊ฑด์ด ์ฐธ์กฐํ•˜๋Š” ์ปฌ๋Ÿผ : ๋ถ€๋ชจ์ปฌ๋Ÿผ
ย ย ย  ์ž์‹ ์ปฌ๋Ÿผ์—๋Š” ๋ถ€๋ชจ ์ปฌ๋Ÿผ์— ์žˆ๋Š” ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฝ์ž…/์ˆ˜์ •๋  ์ˆ˜ ์žˆ์Œ!
ย ย ย ย (๋‹จ, not null ์ œ์•ฝ์กฐ๊ฑด์ด ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ null๊ฐ’์€ ํ—ˆ์šฉํ•จ)

create table test4
(t_num int primary key,
 t_id int,
 title varchar(20) not null,
 story varchar(100) not null,
 foreign key(t_id) references test3(id));
 
desc test4;

๐Ÿ”ธ [์ œ์•ฝ์กฐ๊ฑด5] check
ย ย ย  ํ•ด๋‹น ์ปฌ๋Ÿผ์ด ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด๋ฌธ์„ ์ž์œ ๋กญ๊ฒŒ ์ง€์ •ํ•˜๋Š” ์ œ์•ฝ์กฐ๊ฑด
ย ย ย ย (์˜ˆ) salary int check (salary > 0)
ย ย ย ย ย ย ย ย  ์„ฑ๋ณ„ varchar(10) check (์„ฑ๋ณ„ in ('๋‚จ','์—ฌ'))
ย ย ย ย ย ย ย ย  jumin varchar(13) check (length(jumin)=13)
ย ย ย ย ย ย ย ย  email varchar(50) check (email like '%@%')

create table test5
(id int(10) primary key,
 name varchar(30) not null,
 jumin varchar(13) not null unique check (length(jumin)=13),
 job varchar(20),
 email varchar(20) unique,
 phone varchar(20) not null unique,
 start_date date check (start_date >= '2005-01-01'));
 
desc test5;
  • Data Dictionary(DB ์‚ฌ์ „) ์‚ฌ์šฉํ•˜๊ธฐ
show databases;
  • DB ์‚ฌ์ „์ธ information_schema๋กœ ์ „ํ™˜ํ•˜๊ธฐ
use information_schema;

show tables;

desc table_constraints;

select table_schema, table_name, constraint_type
from table_constraints
where table_schema = 'hr'
order by table_name;

desc check_constraints;

select *
from check_constraints
where constraint_schema = 'hr';

โœ… ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ

use hr;

๐Ÿ”ธ (์˜ˆ์ œ1) ๊ธฐ์กด ํ…Œ์ด๋ธ”(์„œ๋ธŒ์ฟผ๋ฆฌ ํ…Œ์ด๋ธ”)์— ๋ณต์‚ฌ๋ณธ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋จ.

create table dept80
as select employee_id, last_name, salary*12 as annsal, hire_date
   from employees
   where department_id = 80;
desc dept80;

select*
from dept80;

๐Ÿ”ธ (์˜ˆ์ œ2) ๋ฐฑ์—…์šฉ ๋˜๋Š” ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ๋ณต์‚ฌ๋ณธ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋งŽ์ดํ•จ.

create table copy_dept
as select*
   from departments;
desc copy_dept;


โœ๏ธ <์—ฐ์Šต๋ฌธ์ œ>

shopdb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(์Šคํ‚ค๋งˆ)์—์„œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์—ฐ์Šต๋ฌธ์ œ ์ž‘์—…ํ•˜๊ธฐ!

use shopdb;
  1. ํ…Œ์ด๋ธ” ์ด๋ฆ„ : TITLE
create table title
(TITLE_ID int primary key, 
 TITLE varchar(60) not null,
 DESCRIPTION varchar(400) not null,
 RATING varchar(4) check (RATING in ('G','PR','R','NC17','NR')),
 CATEGORY varchar(20) check (CATEGORY in ('DRAMA','COMEDY','ACTION',
										'CHILD','SCIFI','DOCUMENTARY')),
 RELEASE_DATE date);
desc title;

  1. ํ…Œ์ด๋ธ” ์ด๋ฆ„ : TITLE_COPY
create table title_copy
(COPY_ID int,
 TITLE_ID int,
 STATUS varchar(15) not null check 
 		(STATUS in ('AVAILABLE','DESTROYED','RENTED','RESERVED')),
 primary key(COPY_ID, TITLE_ID),
 foreign key(TITLE_ID) references title(TITLE_ID));
desc title_copy;

  • check ์ œ์•ฝ์กฐ๊ฑด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋” ๋””ํ…Œ์ผํ•˜๊ฒŒ ๋ณด๊ณ ์‹ถ์„๋•Œ
-- DB ์‚ฌ์ „ ์กฐํšŒ
use information_schema;

select*
from check_constraints
where constraint_schema = 'shopdb';

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด