본문 바로가기
Java . Spring . Web . SQL

SQL : DDL (Data Definition Language) : 데이터 정의 언어

by heidish 2020. 9. 13.
반응형

DDL  (Data Definition Language)

= 데이터 정의 언어

 

데이터 저장 구조를 명시하는 언어이다.

테이블 스키마의 정의, 수정, 삭제...

 

 

 

 

데이터 정의 언어의 종류

 

테이블 생성  :  create table

테이블 삭제  :  drop table

테이블 수정  :  alter table

기본키, 외래키 생성

 

 

 


 

테이블 생성

create table 테이블명 (필드리스트);

필드리스트 => 필드명 데이터타입

 


테이블 생성 (with 기본키)

 

department 테이블을 생성해보자.

 

create table department
(
	dept_id varchar2(10) not null,
    dept_name varchar2(14) not null,
    office varchar2(10)
);

위와 같이 테이블을 생성하게 된다.

만약 테이블을 생성할 때, primary key를 추가한다고 해보자.

create table department
(
	dept_id varchar2(10) not null,
    dept_name varchar2(14) not null,
    office varchar2(10),
    primary key(dept_id)
);

원래 여태까지는 그냥 primary key(적용할필드명) 이렇게 설정해줬는데

앞으로는 아래와 같이 기본키 또는 외래키를 설정하자!

 

 

기본키나 외래키를 설정할때는 constraint와 제약식 이름을 이용해 설정하자 !

create table department
(
	dept_id varchar2(10) not null,
    dept_name varchar2(14) not null,
    office varchar2(10),
    constraint pk_department primary key(dept_id)
);

constraint pk_department primary key(dept_id);

 

제약식 이름은 보통 "primary key"의 약자인 "pk" 에 언더바 "_" 를 붙이고, 뒤에 테이블명을 붙여주는게 일반적이다. 

 

constraint 제약식이름 primary key(필드명);

                       ↓

constraint pk_테이블명 primary key(필드명);

 


테이블 생성 (with 기본키, 외래키)

 

student 라는 테이블에 기본키, 외래키를 적용해서 생성해보자.

department 테이블이 참조되는 테이블, student라는 테이블은 참조하는 테이블이다.

create table student
(
	stu_id varchar2(10),
	resident_id varchar2(14) not null,
	name varchar2(10) not null,
	year int,
	address varchar2(10),
	dept_id varchar2(10),
	constraint pk_student primary key(stu_id),
	constraint fk_student foreign key(dept_id) references department(dept_id)
);

 

기본키 (primary key) 는 아래와 같이 설정한다.

constraint pk_테이블명 primary key(필드명);

 

외래키 (foreign key) 는 아래와 같이 설정한다.

constraint fk_테이블명 foreign key(필드명) references 참조되는테이블명(필드명);

 

 

참조되는 테이블(department)과, 참조하는 테이블(student) 둘 중에서

참조되는 테이블이 먼저 생성되어야한다.

또한 참조되는 테이블에서는 반드시 하나 이상의 필드가 primary key로 잡혀있어야 한다.

 


 

아래의 두 개 테이블(professor, course)은 그 뒤의 설명을 위해서 추가로 생성해주었다.

 

professor 테이블

create table professor
(
	prof_id varchar2(10),
	resident_id varchar2(14) not null,
	name varchar2(10) not null,
	dept_id varchar2(10),
	position varchar2(10),
	year_emp int,
	constraint pk_professor primary key(prof_id),
	constraint fk_professor foreign key(dept_id) references department(dept_id)
);

course 테이블

create table course
(
	course_id varchar2(10),
	title varchar2(14) not null,
	credit int,
	constraint pk_course primary key(course_id)
);

 


 

테이블 생성 (with 2개 이상의 외래키)

 

외래키를 설정할 때 아래와 같이 설정한다고 위에서 말했었다.

constraint fk_테이블명 foreign key(필드명) references 참조되는테이블명(필드명);

 

그런데 fk_ 뒤에 붙는 테이블명은 현재 생성하는 테이블명이 되는데,

만약에 외래키를 2개 이상으로 생성하게 되면  fk_테이블명 이게 중복되어버리기 때문에 뒤에 숫자를 붙여서 외래키를 생성할 수 있다.

constraint fk_테이블명1 foreign key(필드명) references 참조되는테이블명(필드명);

constraint fk_테이블명2 foreign key(필드명) references 참조되는테이블명(필드명);

 

create table class
(
	class_id varchar2(10),
	course_id varchar2(10),
	year int,
	semester int,
	division char(1),
	prof_id varchar2(10),
	classroom varchar2(9),
	enroll int,
	constraint pk_class primary key(class_id),
	constraint fk_class1 foreign key(course_id) references course(course_id),
	constraint fk_class2 foreign key(prof_id) references professor(prof_id)
);

 


아래의 takes 테이블도 추가로 생성해줬다,,!

create table takes
(
	stu_id varchar2(10),
	class_id varchar2(10),
	grade char(5),
	constraint pk_takes primary key(stu_id, class_id),
	constraint fk_takes1 foreign key(stu_id) references student(stu_id),
	constraint fk_takes2 foreign key(class_id) references class(class_id)
);

 

 


 

테이블 삭제

drop table 테이블이름;

 

 

테이블을 삭제할 때 주의할점!!!

 

만약 삭제하려는 테이블이 다른 테이블에서 외래키(foreign key)로 참조되는 경우, 삭제가 불가능하다!

 

 

ex )

class 테이블은 takes 테이블에서 외래키로 참조되고있다.

따라서 takes 테이블을 먼저 삭제하기 전 까지, class 테이블은 삭제할 수 없다.

 

만약 takes 테이블을 삭제하지 않은 상태에서 class 테이블을 삭제하려고 아래와 같이 입력했다고 치자.

drop table class;

입력하고 엔터를 누르면 테이블이 삭제되었다는 문구가 뜨는게 아니라 아래와 같은 문구가 뜨게된다.

 

ORA-02449: unique/primary keys in table referenced by foreign keys

= 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있습니다.

 

 

 


 

테이블에 필드 추가 또는 기존 필드를 삭제

 

 

1.  테이블에 새로운 필드 추가하기

 

alter table 테이블명 add 추가할필드명 데이터타입(크기);

 

student 테이블에 age 라는 필드를 추가해보자.

alter table student add age int

 

필드 추가 후 desc 테이블명; 을 통해 추가된 필드를 확인해보자.

 

2.  테이블의 기존 필드를 삭제하기

 

alter table 테이블명 drop column 삭제할필드명;

 

student 테이블에 있는 age 필드를 삭제해보자.

alter table student drop column age;

 

삭제한 뒤 확인해보자.

 

 

 

 

 

 

 

 

 

 

반응형

댓글