본문 바로가기
DB/Oracle

[Oracle] DB 테이블 생성, 수정, 삭제 sql create, alter, drop DDL & 오라클 코맨트

by 졸린이 2022. 10. 3.
반응형

DDL [Data Definition Language]

데이터 정의 언어로써 쉽게 테이블 생성 수정 삭제와 같은 sql문이다.

 

1. CREATE

create table user_info (
    id          varchar2(20) not null,
    password    varchar2(30) not null,
    name        varchar2(20),
    del_flag    char(1) default 'N',
    create_date DATE default sysdate,
    constraint user_pk primary key (id)
);

create table 테이블명 (

  컬럼명 데이터타입 

);

이런식으로 생성하면 된다.

 

컬럼명은 알아보기 쉽게 정하고 데이터 타입과 크기도 원하는 대로 설정하면 된다.

데이터 타입은 char, varchar, number, date 등등 있는데 쉽게 보자면

char는 문자열 (고정값), varchar 역시 문자열이며 (가변, varchar와 varchar2 는 같음)

date는 날짜 타입, number 는 숫자타입이다. number(7, 2) 이면 정수 7자리 소수 2자리 의미이다.

 

not null은 null 값을 허용하지 않는 것, 생략하면 null이 들어와도 되는 의미다.

default는 값을 넣을 때 지정하지 않으면 들어갈 기본값이다, 마찬가지로 생략가능하다.

 

sysdate는 날짜 데이터를 받는 타입이다.

 

constraint 는 제약조건을 표시하며 primary key (필수키)를 id로 설정했다.

이 밖에도 다른 제약조건이 가 있는데 unique는 primary의 넓은 의미라고 생각하면 된다.

key 즉 열쇠 이므로 데이터를 구분짓기 위한 유일한 키이다. 즉 중복되어선 안되고 null이 들어가서도 안된다.

create table user_info (
    id          varchar2(20) not null primary key,
    password    varchar2(30) not null,
    name        varchar2(20),
    del_flag    char(1) default 'N',
    create_date DATE default sysdate
);

이런식으로 작성해도 똑같다.

 

foreign key는 왜래키로 다른 테이블의 참조를 위한 키인데 다른 테이블의 unique나 primary key 여야 한다.

예를 들어 user_info 의 id 컬럼이 user_book 테이블의 외래키로 적용될 수 있다.

create table user_order (
    order_id          varchar2(20) not null primary key,
    order_user_id    varchar2(20) references user_info (id),
    product        varchar2(20),
    price   number(10)
);

이런식으로 쓰긴 하는데 요즘 일할때는 굳이 사용하지 않는 경우도 많다.

사실 요즘인지 아닌지도 잘 모르겠지만 아무튼 선언을 하지 않고 의미적으로만 참조하는 컬럼을 만들어서 사용한다.

2. ALTER

alter문은 table을 수정하고 싶을 때 사용한다. 컬럼 추가, 수정, 삭제 또는 속성 추가, 수정, 삭제가 가능하다.

추가는 ADD, 수정은 MODIFY, 삭제는 DROP 이다.

컬럼 추가 : alter table 테이블명 add(컬럼명 타입(사이즈));

alter table user_info add(phone number(11));

 

컬럼 수정 : alter table 테이블명 modify(컬럼명 타입(사이즈));

alter table user_info modify(phone varchar(11));

 

컬럼 삭제 : alter table 테이블명 drop(컬럼명);

alter table user_info drop(phone);

 

컬럼명 변경 : alter table 테이블명 rename column 기존명 to 변경명;

alter table user_info rename column phone to tell_num;

 

코멘트 설정 : oracle에서는 다른 디비와 다르게 테이블 생성할 때 코멘트를 달지 못하는 것 같다.

뭐 방법이 있는데 못 찾은 것일 수 있지만 아무튼 코멘트 설정도 알아본다.

comment on table 테이블명 is 'comment';

comment on column 테이블명.컬럼명 is 'comment';

comment on table user_info is '유저정보';

comment on column user_info.id is '유저 아이디';
comment on column user_info.password is '유저 패스워드';
comment on column user_info.name is '유저 이름';
comment on column user_info.del_flag is '삭제 여부';

 

3. DROP

테이블 삭제 쿼리이다.

drop table 테이블명

drop table user_info;

그런데 user_info의 키를 외래키로 사용하는 user_order 테이블의 데이터가 있으면 user_info table이 삭제되지 않는다.

ORA-02449: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있습니다. 이런 error message가 뜬다.

그럴때 강제로 삭제하고 싶으면 cascade 옵션을 주면 된다.

drop table user_info cascade constraints;

 

다음 글로는 DML을 올려야 겠다...

참고 DML은 Data Manipulation Language 로 데이터 조작어라고 한다. 데이터 조회, 삽입, 수정, 삭제 쿼리가 있다.

 

반응형

댓글