본문 바로가기

카테고리 없음

[데베개] SQL의 구성 : DDL

* 관계대수 : 직관적 이해의 어려움 + 연산 순서도 고려

=> 자연어에 가까우면서도 비절차적 요소가 포함된 언어는 없을까? => SQL의 등장

 

SQL의 제공 기능

1. 데이터 정의 언어(DDL) : 데이터 저장 구조 명시  ex. 테이블 생성, 수정, 삭제

2. 데이터 조작 언어(DML) : 데이터 접근 및 조작     ex. 레코드의 삽립, 삭제, 수정 등

 

1. 데이터 정의 언어

*테이블 생성 조건 : 테이블 이름, 필드 이름, 필드의 데이터 타입 ...

 

- 필드의 데이터 타입

분류 표준 SQL 오라클 설명
문자 char(n) char(n) n byte 고정길이 문자열 (최대 2000)
varchar(n) varchar2(n) 최대 n byte 가변 길이 문자열 (최대 4000)
숫자 int number(0, 0) 정수
float float 부동 소수
number(p, s) 정밀도 p, 스케일 s 로 정의되는 실수
날짜
시간
date date 년, 월, 일 (yy/mm/dd)
time
timestamp
timestamp 년, 월, 일, 시, 분, 초

 

  • 테이블 생성

create table  테이블이름  필드리스트

*필드리스트 : 필드명 + 데이터 타입

 

ex. department 테이블 생성하는 SQL문

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

create table : 생성문

department : 테이블 이름

( ... ) : 필드 리스트

 ㄴ dept_id, dept_name, office : 필드명

 ㄴ varchar2(2) : 데이터 타입 

 ㄴ not null : 제약 조건 (NULL을 허용하지 않음)

 

  • 기본 키 설정

constraint  제약조건이름  primary key  (기본키 필드명)

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

constraint ~ primary key : 제약문

pk_department : 제약 이름. 자유롭게 지어도 됨.

dept_id : 기본키로 지정할 필드명

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

 

  • 외래 키 설정

- constraint  제약조건이름  foreign key  (외래 키 필드명)  references 참조될테이블이름  기본키필드명

- 외래 키 필드 선언할 때 : references  참조될테이블명  (기본키필드명)

 

ex. student 테이블 생성 후 기본키 및 외래키 설정

create table student (
     stu_id		varchar2(10),
     resident_id	varchar2(14)	not null,
     name		varchar2(10)	notnull,
     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)
 )

constraint ~ foreign key ~ references : 제약문

fk_student : student 테이블의 외래키

(dept_id) : student 테이블의 외래 키 필드명

department : 외래 테이블 (=참조될 테이블 이름)

(dept_id) : department 테이블의 기본 키 필드명

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

 

  • 테이블 삭제

drop table  테이블이름

* 다른 테이블에서 외래 키로 참조되는 경우에는 삭제 불가

ex. 

class 테이블은 takes 테이블에게 class_id 필드를 외래키로 주고 있음. (= 참조되고 있음) => class 테이블 삭제 불가

 ㄴ class테이블을 삭제하고 싶다면 takes 테이블을 삭제 or 외래키 제약 조건 삭제

 ㄴ drop table 테이블이름  cascade constraints : 외래 키 해제 후 테이블 삭제 

 

  • 테이블 수정

- 새로운 필드 추가

alter table  테이블이름  add  추가할필드명  데이터타입

 

ex. student 테이블에 age 필드 추가

alter table student add age int

 

- 필드 삭제

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

 

ex. student 테이블의 age 필드 삭제

alter table student drop column age

 

DDL 주의 사항

- 외래키를 갖는 테이블 생성할 때, 외래키가 참조하는 테이블을 먼저 생성.

ex. student 테이블의 dept_id가 depatment의 dept_id를 참조하려는 상황

=> student 테이블을 먼저 생성하여 외래 키 설정 시, department 테이블이 존재하지 않으므로 오류 발생

 

- 참조되는 테이블도 삭제 할 수 없음 (테이블 삭제 항목 참고)