DAY-26. Oracle DDL

5 minute read

๐Ÿ” 2022-04-06 -2

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

โ— ์ˆ˜์—…์„ ๋“ฃ๊ณ , ๊ฐœ์ธ์ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ ์€ ๊ฒƒ ์ด๊ธฐ์— ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋„ ์žˆ์Œ

2022-04-06-2

๐Ÿ”” DDL (Data Definition Language)

๋ฐ์ดํ„ฐ ์ •์˜์–ด

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์ƒ์„ฑ(create), ์ˆ˜์ •(alter), ์‚ญ์ œ(drop) ํ•˜๋Š” ๊ตฌ๋ฌธ

์ œ์•ฝ์กฐ๊ฑด (constraints)

ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ๋•Œ ๊ตฌ์„ฑํ•˜๋Š” ์ปฌ๋Ÿผ์— ๋“ค์–ด๊ฐˆ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ œ์•ฝ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ

โ†’ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ์ •ํ™•์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ(๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ)

  1. not null : ํ•ด๋‹น ์ปฌ๋Ÿผ์— null ๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Œ โ†’ null ๊ฐ’ ํ—ˆ์šฉ x
  2. unique : ์ค‘๋ณต๋œ ๊ฐ’์„ ํ—ˆ์šฉ x โ†’ null๊ฐ’๋„ ๋“ค์–ด๊ฐ„๋‹ค
  3. primary key(๊ธฐ๋ณธํ‚ค) : not null + nuique โ†’ null๊ฐ’ ํ—ˆ์šฉ x ์ค‘๋ณต ๊ฐ’ ํ—ˆ์šฉ x โ†’ ์ปฌ๋Ÿผ์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ โ†’ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—์„œ ํ•œ๋ฒˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  4. foreign key(์™ธ๋ž˜ํ‚ค) : ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์„ค์ • โ†’ Aํ…Œ์ด๋ธ”(id,pwโ€ฆ) Bํ…Œ์ด๋ธ”(member_id, countโ€ฆ)๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ • โ†’ Bํ…Œ์ด๋ธ”์˜ member_id ์ปฌ๋Ÿผ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด Aํ…Œ์ด๋ธ”์˜ id์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์—ฌ์•ผํ•˜๋Š” ๊ฒฝ์šฐ
  5. check : ํ•ด๋‹น ์ปฌ๋Ÿผ์— ์ €์žฅ ๊ฐ€๋Šฅํ•œ ๊ฐ’์˜ ๋ฒ”์œ„ ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์„œ ์„ค์ •ํ•œ ๊ฐ’๋งŒ ํ—ˆ์šฉ

๐Ÿš€ ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑฐ๋Š” ๋ฐฉ์‹

  • ์ปฌ๋Ÿผ ๋ ˆ๋ฒจ : ์ปฌ๋Ÿผ๋ช… ์ž๋ฃŒํ˜• ์˜†์— ์ œ์•ฝ์กฐ๊ฑด๋ช…์„ ๋ช…์‹œ
  • ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ : ์ปฌ๋Ÿผ์„ ๋ชจ๋‘ ์ •์˜ํ•œ ํ›„ ๋งˆ์ง€๋ง‰์— ์ œ์•ฝ์กฐ๊ฑด๋ช…(์ปฌ๋Ÿผ๋ช…) ํ˜•์‹์œผ๋กœ ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑธ์–ด์ฃผ๋Š” ๋ฐฉ์‹
๐Ÿ”Ž
create table user_cons (
    no number not null unique,   // not null ๊ณผ unique๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉ
    ,pw varchar2(100) not null
    ,name varchar2(100) not null
    ,gender varchar2(10)
);

๐Ÿš€ primary key

๐Ÿ”Ž
// ๋‘ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ primary key๋กœ ๋ฌถ์„ ๋•Œ
create table user_cons (
    no number
    ,id varchar(100)
    ,pw varchar2(100) not null
    ,gender varchar2(10)
    ,primary key (no,id)
);

insert into user_cons values(1,'11234','tom','๋‚จ');
insert into user_cons values(1,'555aa','kacey','์—ฌ');  // ๊ฐ€๋Šฅ
insert into user_cons values(1,'555aa','kacey','์—ฌ'); // unique constraint ๋ฐœ์ƒ
  • primary key๋ฅผ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ๋ณตํ•ฉํ‚ค ํ˜•ํƒœ๋กœ ์ ์šฉ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด โ†’ ์ปฌ๋Ÿผ๋ ˆ๋ฒจ์—์„œ๋Š” ๋ถˆ๊ฐ€ โ†’ ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ ์‚ฌ์šฉ
  • primary key๊ฐ€ no, id ์ด๋‹ค โ†’ no,id๋ฅผ ํ•˜๋‚˜์˜ ์…‹ํŠธ๋กœ ๋ณด๊ณ  โ†’ ๋‘˜๋‹ค ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ insert๋ฅผ ํ•˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ

๐Ÿš€ foreign key

์ฐธ์กฐ๋œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์ด ์ œ๊ณตํ•˜๋Š” ๊ฐ’๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์•ฝํ•˜๊ณ  ์‹ถ์„ ๋•Œ

โ†’ ์ฐธ์กฐํ•˜๋Š” ์ปฌ๋Ÿผ, ์ฐธ์กฐ๋˜๋Š” ์ปฌ๋Ÿผ์„ ํ†ตํ•ด ๋‘ ํ…Œ์ด๋ธ”๊ฐ„์— ๊ด€๊ณ„๊ฐ€ ์ƒ์„ฑ

โ†’ ์ฐธ์กฐํ•˜๋Š” ์ปฌ๋Ÿผ์ด ์ฐธ์กฐ๋˜๋Š” ์ปฌ๋Ÿผ์— ์žˆ๋Š” ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜, NULL ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ


// student ํ…Œ์ด๋ธ”
create table student (
    id varchar2(100) primary key
    ,name varchar2(100) not null
    ,age number not null
);

insert into student values('001','tom',20);
insert into student values('002','salley',30);
insert into student values('003','chole',25);

// borrow ํ…Œ์ด๋ธ” 1
create table borrow (
    book_id varchar2(100) primary key
    ,std_id varchar2(100)
    ,rent_date date
    ,foreign key (std_id) references student (id)  // foreign key (์ฐธ์กฐํ•˜๋Š” ์ปฌ๋Ÿผ) references ์ฐธ์กฐ๋Œ€์ƒํ…Œ์ด๋ธ” (์ฐธ์กฐ๋Œ€์ƒ ์ปฌ๋Ÿผ๋ช…)
);

insert into borrow values('500','005',sysdate);  // ์—๋Ÿฌ ๋ฐœ์ƒ -> 005๊ฐ€ ๋ฌธ์ œ
insert into borrow values('500','002',sysdate);  // ์—๋Ÿฌ ๋ฐœ์ƒ x ๋ถ€๋ชจํ‚ค์— ์žˆ๋Š” id๋งŒ ์ž…๋ ฅ๊ฐ€๋Šฅ

// borrow ํ…Œ์ด๋ธ” 2
create table borrow(
    book_id varchar2(100) primary key
    , std_id varchar2(100) references student(id) // ์ปฌ๋Ÿผ๋ช… ์ž๋ฃŒํ˜• reference ์ฐธ์กฐ๋Œ€์ƒ (์ฐธ์กฐ๋Œ€์ƒ ์ปฌ๋Ÿผ๋ช…)
    , rend_date date
)

insert into borrow values('500','002',sysdate); // ์—๋Ÿฌ ๋ฐœ์ƒ x
  • ์ฐธ์กฐํ•˜๋Š” ์ปฌ๋Ÿผ : ์ฐธ์กฐ ๋Œ€์ƒ์„ ์ฐธ์กฐํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ (borrow ํ…Œ์ด๋ธ”)
  • ์ฐธ์กฐ๋˜๋Š” ์ปฌ๋Ÿผ : ์ฐธ์กฐ ๋Œ€์ƒ์ด ๋˜๋Š” ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ(student ํ…Œ์ด๋ธ”)

์‚ญ์ œ

  • ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ ํ•  ๋•Œ ์ž์‹ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ• ์ง€ โ†’ ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑธ ๋•Œ ์‚ญ์ œ์˜ต์…˜๋„ ํ•จ๊ป˜ ๊ฑธ์–ด์คŒ
  • ๊ธฐ๋ณธ ์‚ญ์ œ ์˜ต์…˜์€ on delete no action โ†’ ์ž์‹ ์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ์‚ญ์ œ ํ•  ์ˆ˜ ์—†๋‹ค.(default)
๐Ÿ”Ž
// ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š” id -> 002 -> ์‚ญ์ œ
// ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š” ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž์‹ ์ปฌ๋Ÿผ์ด ์žˆ๋‹ค๋ฉด ์›๋ณธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
// borrow์—๋„ id๊ฐ€ 002๊ฐ€ ์กด์žฌ

delete from student where id = '002';  // integrity constraint violated - child record found

1) on delete set null

๐Ÿ”Ž
create table student (
    id varchar2(100) primary key
    ,name varchar2(100) not null
    ,age number not null
);

insert into student values('001','tom',20);
insert into student values('002','salley',30);
insert into student values('003','chole',25);

create table borrow(
    book_id varchar2(100) primary key
    , std_id varchar2(100) references student(id) on delete set null // ์ปฌ๋Ÿผ๋ช… ์ž๋ฃŒํ˜• reference ์ฐธ์กฐ๋Œ€์ƒ (์ฐธ์กฐ๋Œ€์ƒ ์ปฌ๋Ÿผ๋ช…)
    , rend_date date
);
insert into borrow values('500','002',sysdate);

delete from student where id = '002';  // student์—์„œ 002ํ–‰ ์‚ฌ๋ผ์ง„๋‹ค
select * from borrow; // ๊ธฐ์กด์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ 002 ๊ฐ’์ด ์‚ฌ๋ผ์ง„๋‹ค

5.png

4.png

  • ๋ถ€๋ชจ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ์ž์‹์˜ ๋ฐ์ดํ„ฐ๊ฐ€ null๋กœ ๋ฐ”๋€œ โ†’ ๊ธฐ์กด์˜ borrow ํ…Œ์ด๋ธ”์˜ std_id ๊ฐ€ null๋กœ ๋ฐ”๋€œ

2) on delete cascade

  • ๋ถ€๋ชจ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ž์‹ ๋ฐ์ดํ„ฐ ์—ญ์‹œ๋„ ํ•จ๊ป˜ ์‚ญ์ œ โ†’ on delete set null๊ณผ ๋‹ค๋ฅด๊ฒŒ ์•„์˜ˆ ํ–‰ ์ž์ฒด๊ฐ€ ๋‹ค ์‚ญ์ œ ๋˜๋ฒ„๋ฆผ
  • ์˜ˆ์‹œ) ๊ฒŒ์‹œ๊ธ€ ํ•˜๋‚˜์— 3๊ฐœ์˜ ๋Œ“๊ธ€์ด ๋‹ฌ๋ ธ๋‹ค โ†’ 1๋ฒˆ ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ โ†’ 3๊ฐœ์˜ ๋Œ“๊ธ€๋„ ๋ชจ๋‘ ์‚ญ์ œ
drop table borrow;
create table borrow(
    book_id varchar2(100) primary key
    , std_id varchar2(100) references student(id) on delete cascade
    , rend_date date
);

3) check

  • ๊ฐ’ ์ž…๋ ฅ์‹œ ์กฐ๊ฑด์„ ์ค€๋‹ค
drop table user_cons;
create table user_cons(
    no number
    ,id varchar2(100)
    ,pw varchar2(100)
    ,gender varchar2(100) check(gender in ('๋‚จ','์—ฌ'))  -- ๋‚จ ์•„๋‹ˆ๋ฉด ์—ฌ๋งŒ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์กฐ๊ฑด
    ,primary key (no,id)
);
insert into user_cons values(1,'ab123','sdasd','๋ง๊ณ '); // check constraint ์—๋Ÿฌ
insert into user_cons values(1,'ab123','sdasd','๋‚จ');
select * from user_cons;

4) default

  • ํ…Œ์ด๋ธ” ์ƒ์„ฑ์‹œ ๊ฐ’์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ์ž๋™์œผ๋กœ ๋“ค์–ด๊ฐˆ ๊ฐ’ ์„ค์ •
create table temp(
    date_one date
    ,date_two date default sysdate // ๊ฐ’์„ ์„ค์ • ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด default๋กœ sysdate๋กœ ์ค€๋‹ค
);

insert into temp values(sysdate); // ์ปฌ๋Ÿผ์˜ ์ด ๊ฐœ์ˆ˜์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ์žˆ์–ด ์—๋Ÿฌ ๋ฐœ์ƒ
insert into temp values(sysdate, default);
select * from temp;

alter

  • ํ…Œ์ด๋ธ”์— ์ •์˜๋œ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ •์˜์–ด
  • ์ปฌ๋Ÿผ ์ถ”๊ฐ€/์‚ญ์ œ, ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€/์‚ญ์ œ, ์ปฌ๋Ÿผ์˜ ์ž๋ฃŒํ˜• ๋ณ€๊ฒฝ, defualt๊ฐ’ ๋ณ€๊ฒฝ
  • ํ…Œ์ด๋ธ”๋ช…/์ปฌ๋Ÿผ๋ช…/์ œ์•ฝ์กฐ๊ฑด์˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ
// ํ…Œ์ด๋ธ” ์ƒ์„ฑ
create table member(
    no number primary key
    ,id varchar2(100)
    ,pw varchar2(100)
);

// desc member; -- ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋ณด์—ฌ์คŒ

// ํ…Œ์ด๋ธ” ์ˆ˜์ •

// ์ด๋ฏธ ์กด์žฌํ•˜๋Š” member ํ…Œ์ด๋ธ”์— ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ ์ถ”๊ฐ€(name)
alter table member add (name varchar2(100));

// ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ ์ถ”๊ฐ€(age) + default
alter table member add (age number default 0 );

// ์ œ์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€ -> id ์ปฌ๋Ÿผ์— unique ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€
alter table member add constraint id_unq unique(id);

// ์ œ์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€ -> pw์ปฌ๋Ÿผ์— not null ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ -> add๊ฐ€ ์•„๋‹Œ modify
// alter table member add constraint pw_nn not null(pw); ์—๋Ÿฌ
alter table member modify pw constraint pw_nn not null;

// ์ปฌ๋Ÿผ๋ช… ์ˆ˜์ • -> pw ์ปฌ๋Ÿผ์„ password ๋ผ๊ณ  ๋ณ€๊ฒฝ
alter table member rename column pw to password;

// ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ˆ˜์ • - name varchar2(100) -> char(100)
alter table member modify name char(100);

// ์ปฌ๋Ÿผ ์‚ญ์ œ -age ์ปฌ๋Ÿผ ์‚ญ์ œ
alter table member drop column age;

// ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ -- passwrod ์ปฌ๋Ÿผ์˜ ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ
// ์ œ์•ฝ์กฐ๊ฑด์˜ ์ด๋ฆ„์„ ๋จผ์ € ์•Œ์•„์•ผ ํ•จ
select constraint_name from user_constraints where table_name = 'MEMBER';
alter table member drop constraint pw_nn;

// ์ œ์•ฝ์กฐ๊ฑด๋ช… ์ˆ˜์ •
alter table member rename constraint SYS_C007105 to no_pk;
select constraint_name from user_constraints where table_name = 'MEMBER';

// ํ…Œ์ด๋ธ”๋ช… ๋ณ€๊ฒฝ
alter table member rename to tbl_member;
select * from member; -- ์—๋Ÿฌ member์—์„œ tbl_member๋กœ ๋ณ€๊ฒฝ
select * from tbl_member;

Categories:

Updated:

Leave a comment