Day35 Database

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

22/12/13

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

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

๐Ÿ“‚ ํ…Œ์ด๋ธ” ์ˆ˜์ • (Alter table)

โœ… alter table ํ…Œ์ด๋ธ”๋ช… add ---;ย ย ย ย  : ์ปฌ๋Ÿผ ์ถ”๊ฐ€, ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€
โœ… alter table ํ…Œ์ด๋ธ”๋ช… modify ---; : ์ปฌ๋Ÿผ ์ˆ˜์ •, ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€
โœ… alter table ํ…Œ์ด๋ธ”๋ช… drop ---;ย ย ย  : ์ปฌ๋Ÿผ ์‚ญ์ œ, ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ
โœ… alter table ํ…Œ์ด๋ธ”๋ช… rename ---; : ์ปฌ๋Ÿผ๋ช… ์ˆ˜์ •

โœ… ์ปฌ๋Ÿผ ์ถ”๊ฐ€ : alter table ํ…Œ์ด๋ธ”๋ช… add ---;

use hr;
desc dept80;
select*
from dept80;

๐Ÿ”ธ (์˜ˆ์ œ1) dept80 ํ…Œ์ด๋ธ”์— job_id ์ปฌ๋Ÿผ ์ถ”๊ฐ€

alter table dept80 
add job_id varchar(9);
  • ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ์ปฌ๋Ÿผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งˆ์ง€๋ง‰ ์ปฌ๋Ÿผ์œผ๋กœ ์ถ”๊ฐ€๋จ

  • ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ์ปฌ๋Ÿผ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ null๊ฐ’์ด ์ €์žฅ๋จ

๐Ÿ”ธ (์˜ˆ์ œ2) dept80 ํ…Œ์ด๋ธ”์— default ๊ฐ’์ด ์žˆ๋Š” email ์ปฌ๋Ÿผ ์ถ”๊ฐ€

alter table dept80
add email varchar(30) default '๋ฏธ์ž…๋ ฅ';

desc dept80;

  • ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ์ปฌ๋Ÿผ์— defaul๊ฐ’ ์ €์žฅ๋จ.

๐Ÿ”ธ (์˜ˆ์ œ3) ์ฒซ๋ฒˆ์งธ ์ปฌ๋Ÿผ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ

alter table dept80
add emp_number int first;

๐Ÿ”ธ (์˜ˆ์ œ4) ํŠน์ • ์ปฌ๋Ÿผ ๋‹ค์Œ ์ปฌ๋Ÿผ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ

alter table dept80
add salary int default 300 not null after last_name;

๐Ÿ”ธ (์˜ˆ์ œ5) not null ์ œ์•ฝ์กฐ๊ฑด๊ณผ ํ•จ๊ป˜ ์ปฌ๋Ÿผ ์ถ”๊ฐ€ํ•˜๊ธฐ

alter table dept80
add salary1 int not null after last_name;
-- last_name ์ปฌ๋Ÿผ ๋’ค์— ์ปฌ๋Ÿผ ์ถ”๊ฐ€๋จ.
desc dept80;

  • ์ž๋™์œผ๋กœ null ๊ฐ’ ๋Œ€์‹  0์ด ์ ์šฉ๋จ.
select*
from dept80;


โœ… ์นผ๋Ÿผ ์ˆ˜์ • : alter table ํ…Œ์ด๋ธ”๋ช… modify ---;
: ๋ฐ์ดํ„ฐํƒ€์ž…, ์ปฌ๋Ÿผ ์‚ฌ์ด์ฆˆ, default๊ฐ’, not null ์ œ์•ฝ์กฐ๊ฑด ๋“ฑ ์ˆ˜์ • ๊ฐ€๋Šฅํ•จ.

๐Ÿ”ธ (์˜ˆ์ œ1) salary ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐํƒ€์ž…(int->bigint), default๊ฐ’ ์‚ญ์ œ, not null์‚ญ์ œ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…

alter table dept80 
modify salary bigint;

desc dept80;

๐Ÿ”ธ (์˜ˆ์ œ2) last_name ์ปฌ๋Ÿผ์˜ ์ปฌ๋Ÿผ์‚ฌ์ด์ฆˆ(25->30) ๋ณ€๊ฒฝ, not null ์œ ์ง€ํ•˜๋Š” ์ž‘์—…

alter table dept80
modify last_name varchar(30) not null;

๐Ÿ”ธ (์˜ˆ์ œ3) salary ์ปฌ๋Ÿผ์— default๊ฐ’, not null ์ถ”๊ฐ€ํ•˜๊ธฐ

alter table dept80
modify salary bigint default 500 not null; 


โœ… ์ปฌ๋Ÿผ๋ช… ๋ณ€๊ฒฝ : alter table ํ…Œ์ด๋ธ”๋ช… rename column ๊ธฐ์กด์ปฌ๋Ÿผ๋ช… to ์ƒˆ์ปฌ๋Ÿผ๋ช…;

alter table dept80
rename column hire_date to start_date;

desc dept80;


โœ… ์ปฌ๋Ÿผ ์‚ญ์ œ : alter table ํ…Œ์ด๋ธ”๋ช… drop ---;

alter table dept80
drop emp_number;

โœ… ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

  • pk, uk, ck, fk ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ : alter table ํ…Œ์ด๋ธ”๋ช… add ---;
  • not null ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ : alter table ํ…Œ์ด๋ธ”๋ช… modify ---;

๐Ÿ”น primary key ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ํ•˜๊ธฐ

alter table dept80
add primary key(employee_id);

๐Ÿ”น unique ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ํ•˜๊ธฐ

alter table dept80
add unique(job_id);

๐Ÿ”น check ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ํ•˜๊ธฐ

alter table dept80
add check (salary>100);

๐Ÿ”น foreign key ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ํ•˜๊ธฐ

alter table dept80
add mgr_id int default 150;

alter table dept80
add foreign key(mgr_id) references dept80(employee_id);

๐Ÿ”น not null ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

alter table dept80
modify annsal double(22,0) not null; 

desc dept80;

โœ… ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ

  • pk, uk, ck, fk ์ œ์•ฝ์กฐ๊ฑด : alter table ํ…Œ์ด๋ธ”๋ช… drop ---;
  • not null ์ œ์•ฝ์กฐ๊ฑด : alter table ํ…Œ์ด๋ธ”๋ช… modify ---;

< fk, ck, uk ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ์‹œ ์ œ์•ฝ์กฐ๊ฑด๋ช… ์•Œ์•„์•ผํ•จ >

use information_schema;

select*
from table_constraints
where table_name = 'dept80';

๐Ÿ”ธ foreign key ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œํ•˜๊ธฐ

use hr;

alter table dept80
drop foreign key dept80_ibfk_1;

๐Ÿ”ธ primary key ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œํ•˜๊ธฐ

alter table dept80
drop primary key;
  • ์ž‘์—…ํ•˜๊ณ  information_schema ๋‹ค์‹œ ์—ด์–ด๋ณด๋‹ˆ๊นŒ fk,pk์—†์–ด์ง
use information_schema;

select*
from table_constraints
where table_name = 'dept80';

๐Ÿ”ธ not null ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œํ•˜๊ธฐ

use hr;

alter table dept80
modify annsal double(22,0) null;	-- null์„ ์•ˆ์ ์–ด๋„ ์‚ญ์ œํ•˜๋Š”๊ฒƒ

desc dept80;


๐Ÿ“ [์ •๋ฆฌ] alter table ๊ตฌ๋ฌธ

โœ… alter table ํ…Œ์ด๋ธ”๋ช… add ---;ย ย ย ย  : ์ปฌ๋Ÿผ ์ถ”๊ฐ€, ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€(pk, fk, uk, ck)
โœ… alter table ํ…Œ์ด๋ธ”๋ช… modify ---; : ์ปฌ๋Ÿผ ์ˆ˜์ •, ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€/์‚ญ์ œ(nn)
โœ… alter table ํ…Œ์ด๋ธ”๋ช… drop ---;ย ย ย  : ์ปฌ๋Ÿผ ์‚ญ์ œ, ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ(pk, fk, uk, ck)
โœ… alter table ํ…Œ์ด๋ธ”๋ช… rename ---; : ์ปฌ๋Ÿผ๋ช… ์ˆ˜์ •


๐Ÿ“‚ ํ…Œ์ด๋ธ” ์‚ญ์ œ (Drop table)

: DB์—์„œ ํ…Œ์ด๋ธ” ์‚ญ์ œ(ํ…Œ์ด๋ธ”๊ตฌ์กฐ, ๋ฐ์ดํ„ฐ, ์ œ์•ฝ์กฐ๊ฑด ๋“ฑ)ํ•˜๋Š” ๋ช…๋ น์–ด

drop table dept80;
desc dept80;


๐Ÿ“‚ํ…Œ์ด๋ธ” ์ ˆ๋‹จ (Truncate table)

: ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋งŒ ๋‚จ๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์‚ญ์ œ๋˜๋Š” ๋ช…๋ น์–ด. ์ฆ‰, ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์›Œ์ง€๋Š” ๋ช…๋ น์–ด.

select *
from copy_dept;   -- 32๊ฐœ์˜ ํ–‰์ด ์ €์žฅ๋œ ํ…Œ์ด๋ธ”

truncate table copy_dept; -- ๋ชจ๋“  ํ–‰ ์‚ญ์ œ๋จ.
-- (==) delete from copy_dept;

select *
from copy_dept;   -- 0๊ฐœ์˜ ํ–‰์ด ์กฐํšŒ๋จ.

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

: ๋ทฐ(view)๋ฅผ ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด(DDL) : create view, alter view, drop view

  • ๋ทฐ(view)๋ž€?
    : ํ•˜๋‚˜ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ์€ ๋˜์—ˆ์œผ๋‚˜ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๊ณ , DB ์‚ฌ์ „์— ์ •์˜๋งŒ ๋˜์–ด์žˆ๋Š” ๊ฐ€์ƒ์˜ ๋…ผ๋ฆฌ์ ์ธ ํ…Œ์ด๋ธ”
  • ๋ทฐ ์‚ฌ์šฉ ๋ชฉ์  : ๋ณด์•ˆ์„ฑ, ๊ณต๊ฐ„ ํšจ์œจ์„ฑ, ํŽธ์˜์„ฑ

๐Ÿ“‚ ๋ทฐ ์ƒ์„ฑ : create view

[๋ฌธ๋ฒ•] create view ๋ทฐ๋ช…
ย ย ย ย ย ย  ย as select ์ปฌ๋Ÿผ๋ช…1, ์ปฌ๋Ÿผ๋ช…2
ย ย ย ย ย ย ย  from ํ…Œ์ด๋ธ”๋ช… ---> ๋ทฐ์˜ base table
ย ย ย ย ย ย ย  where ์กฐ๊ฑด๋ฌธ;

์‚ฌ์šฉ๋ฐฉ๋ฒ• : ํ…Œ์ด๋ธ”๊ณผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ”ธ (์˜ˆ์ œ1) empvu80๋ทฐ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ

create view empvu80
as select employee_id, last_name, salary, department_id
    from employees
    where department_id = 80;
    
desc empvu80;

select*
from empvu80;

๐Ÿ”ธ (์˜ˆ์ œ2) deptvu๋ทฐ ์ƒ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ ์กฐ์ž‘

create view deptvu
as select*
	from departments
    where department_id > 200;
    
-- ๋ทฐ ๊ตฌ์กฐ ์กฐํšŒ
desc deptvu;

-- ๋ทฐ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰(์—ฐ๊ณ„๋œ departments ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰๋จ)
select*
from deptvu;

  • ๋ทฐ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์กฐ์ž‘(์—ฐ๊ณ„๋œ departments ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…๋จ)
insert into deptvu
values(340,'AAA',null,1700);
  • ๋ทฐ์—์„œ ์‚ฝ์ž… ๊ฒฐ๊ณผ ํ™•์ธ(์—ฐ๊ณ„๋œ departments ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰๋จ)
select*
from deptvu;

  • base table(departments)์—์„œ ์‚ฝ์ž… ๊ฒฐ๊ณผ ํ™•์ธ
select*
from departments;

๐Ÿ”ธ (์˜ˆ์ œ3) ๋ณด์•ˆ์„ฑ ์˜ˆ์ œ

use shopdb;

create view member_vu
as select member_id, member_name, birth, job
   from members;
   
desc member_vu;

select *
from member_vu;

๐Ÿ”ธ (์˜ˆ์ œ4) ๋‹จ์ˆœ์„ฑ ์˜ˆ์ œ

use hr;

create view dept_sal_vu
as select d.department_name, sum(e.salary) as "๊ธ‰์—ฌ ํ•ฉ๊ณ„", 
		 avg(e.salary) as "๊ธ‰์—ฌ ํ‰๊ท ", 
         min(e.salary) as "์ตœ์†Œ ๊ธ‰์—ฌ", max(e.salary) as "์ตœ๋Œ€ ๊ธ‰์—ฌ"
 from employees e join departments d
 on e.department_id = d.department_id
 group by d.department_name
 order by d.department_name;
 
desc dept_sal_vu;

select *
from dept_sal_vu;


๐Ÿ“‚ ๋ทฐ ์ˆ˜์ • : alter view

alter view empvu80
as select employee_id, last_name, salary, email, department_id
	from employees
    where department_id = 80;

desc empvu80;

select*
from empvu80;


๐Ÿ“‚ ๋ทฐ ์‚ญ์ œ : drop view

drop view empvu80;

desc empvu80;	-- ์ž‘์—…์•ˆ๋จ!

select*
from empvu80;	-- ์ž‘์—…์•ˆ๋จ!

๐Ÿ’ฅ ๋ทฐ๋ฅผ ์‚ญ์ œํ•˜๋”๋ผ๋„ base table์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ์—†์Œ!


๐Ÿ“‚ DB ์‚ฌ์ „์œผ๋กœ๋ถ€ํ„ฐ view ์ •๋ณด ์กฐํšŒ

use information_schema;

show tables;

select *
from views
where table_schema = 'hr';

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

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