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;
삭제한 뒤 확인해보자.
'Java . Spring . Web . SQL' 카테고리의 다른 글
DML (Data Manipulation Language) : 레코드 검색 (0) | 2020.09.13 |
---|---|
SQL : DML (Data Manipulation Language) : 데이터 조작 언어 (0) | 2020.09.13 |
2020/09/10 : jQuery : xml bookApp (0) | 2020.09.11 |
2020/09/10 : jQuery : 버블(bubble) 차트 (0) | 2020.09.10 |
2020/09/10 : jqPlot : 파이(pie) 차트 (원형 그래프) (0) | 2020.09.10 |
댓글