DB/SQL - Oracle

[SQL] DDL(데이터 정의어) - create, drop

생각많은 프로그래머 2024. 2. 2. 02:36
 
오늘은 데이터 정의어(DDL)를 살펴보고
create 의 예로 테이블 생성에 대해,
drop의 예로 테이블 삭제에 대한
예시와 함께 익혀보고자 한다.
 
 
*** 참고로 SQL Developer에서 작업을 한다면
명령어를 실행할 때는 해당 명령어 뒤에 ;를 붙이고
그 라인에 마우스 커서를 둔 상태에서 Ctrl+Enter를 입력한다.
 

 

SQL 종류
1. 데이터를 정의하는 쿼리 - DDL(데이터 정의어) : create, drop, alter, truncate 
2. 데이터를 조작하는 쿼리 - DML(데이터 조작어) : insert, select, update, delete
3. 데이터를 제어하는 쿼리 - DCL(데이터 제어어) : grant, revoke
4. 트랜잭션 제어하는 쿼리 - TCL(트랜잭션 제어어) : commit, rollback, checkpoint 

 

 

DDL 특징 요약
-  create :  테이블이나 인덱스, 뷰 등 데이터베이스 객체를 생성
- drop : 생성된 데이터베이스 객체를 영구히 삭제
- alter : 이미 생성된 데이터베이스 객체를 수정
- truncate : 테이블이나 클러스터의 데이터를 통째로 삭제
 
 
데이터 정의어  : create

 

테이블을 생성할 때는 create 명령어를 사용한다.

 

테이블 생성 시 각 컬럼에 대한 정보를 함께

입력하는데, 컬럼명과 속성, 제약조건(선택)을 입력한다.

 

제약조건은 다음과 같이 5가지가 있다.

- PRIMARY KEY(기본키) 

- FOREIGN KEY(외래키) 

- UNIQUE

- NOT NULL

- CHECK

 

제약조건에 포함되지는 않지만 

제약조건 자리에 DEFAULT로

해당 필드의 기본값을 설정할 수 있다.

 

+ 각각의 제약조건에 대해서는 

아래에 별도로 링크를 첨부하고자 한다.

 

테이블명을 member라고 한다면 

아래와 같이 아이디와 이름을 컬럼으로 한 

테이블을 생성 명령문을 작성할 수 있다.

 

입력 시 유의할 점

1. 컬럼명 속성 제약조건 순으로 작성한다는 점이고

(제약조건은 무조건 입력해야 하는 것은 아니다.)

2. 각 컬럼에 대한 코드 끝에 ,를 입력해서 구분한다는 점이다.

3. 마지막 컬럼의 경우는 끝에 ,를 입력하지 않는다.

4. 맨 마지막에는 );를 붙여야 한다.

create table member(
id varchar2(10) primary key,
name varchar2(10) not null
);

 

위의 방식은 내가 선호하는 작성방식이고

사람마다 조금씩 다른 형태로 입력한다.

나는 가독성을 고려하여 한 줄로 입력하지 않고

위와 같이 입력하는 방식을 선호한다.

유의할 점 4가지를 지키지 않으면 반드시 오류가 발생하니

,와 ;과 같은 작은 부분도 꼼꼼하게 살펴야 한다.

 

 

*** 테이블 생성 후에 컬럼명, 속성, 제약조건만

따로 보고 싶다면, desc 명령어를 사용한다.

desc  테이블명;

 

 

문법 자체가 어렵지는 않지만, 요구사항을 토대로

테이블을 생성하려면 꼼꼼하게 살펴볼 점들이 꽤 많다.

 

바로 예시를 통해 살펴보자.

요구사항 : 상품평 남기기
등록된 상품에 대한 리뷰를 남기는 프로그램
상품은 아이디, 상품명, 수량, 등록일로 구성되며
아이디는 중복될 수 없다.
수량은 기본값이 0이다.
상품 하나에는 여러 개의 리뷰를 작성할 수 있다.
상품이 삭제되면 리뷰도 같이 삭제되어야 한다.

 

 

처음 craete문을 접한다면 아래 요구사항에서

무엇을 발견해야 하는지 개념이나 용어가 낯설 수 있다.

이를 감안하고 가볍게 문법에만 집중해서 그렇구나,

생각하고 보면 좋을 것 같다.

 

위 요구사항을 보았을 때

어떤 부분을 캐치해야 하는지 정리해 보면, 

상품은 아이디, 상품명, 수량, 등록일로 구성되며 
>>  상품등록 테이블의 컬럼 구성
아이디는 중복될 수 없다.
>> 아이디 컬럼의 제약조건(unique일 수도 있지만 여기서는 기본키로 지정)
수량은 기본값이 0이다.
>> 수량 컬럼의 default값 설정을 0으로 한다
상품 하나에는 여러 개의 리뷰를 작성할 수 있다.
>> 상품 : 리뷰 의 관계성이 1:N, 리뷰 테이블이 별도로 필요하다!
상품이 삭제되면 리뷰도 같이 삭제되어야 한다.
>> on delete cascade를 사용한다.
 

테이블명 : 상품등록
아이디(PK)   상품명   수량   등록일

create table 상품등록(
아이디 varchar2(4) primary key,
상품명 varchar2(10),
수량 int default 0,
등록일 timestamp default sysdate
);
 

테이블명 : 리뷰

리뷰번호(PK)    상품아이디(FK)    작성자    내용     등록일

create table 리뷰(
리뷰번호 int primary key,
상품아이디 varchar2(4),
작성자 varchar2(10),
내용 varchar2(100),
등록일 timestamp default sysdate,
foreign key(상품아이디) references 상품등록(아이디) on delete cascade
);​

 

*** 테이블명이나 컬럼명은 실제로 영문으로 입력하는 것이 룰이다.

위에는 보기 편하도록 한글로 입력했다는 점을 감안하고 봐주시기를...!

 

*** FK로 참조를 거는 경우 컬럼명이 달라도 되지만 속성, 제약조건이 같아야 작동된다.

*** create 명령문은 테이블을 생성할 때만 쓰는 명령문이 아니다. 시퀀스나 뷰를 생성할 때도 쓴다.
예) create sequence c_seq;         - c_seq라는 시퀀스를 생성. 다른 글에서 더 자세히 다루도록 하겠다.

 

 

삭제 명령어 : drop

 

테이블을 삭제하는 경우에는 drop 명령어를 쓴다.

테이블 외에도 시퀀스나  뷰를 삭제하는 경우에도 drop을 쓴다.

 

drop table review;      -  review라는 테이블을 삭제
drop sequence review_seq;     - review_seq라는 시퀀스를 삭제