Database/개념정리

[DataBase] Oracle SQL - DDL (데이터 정의어) CREATE / ALTER / DROP / RENAME / TRUNCATE

Sehyeok20 2021. 3. 2. 20:25
반응형

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

 - 데이터베이스는 데이터 관리 및 보관을 위해 다양한 객체를 제공한다. 이러한 객체를 새로 만들거나 기존에 존재하던 객체를 변경하거나 삭제하는 등의 기능을 수행하는 명령어를 데이터 정의어라고 한다.

 

 

 

DDL 의 종류

 - CREATE : 객체를 생성

 - ALTER : 이미 생성된 객체를 변경

 - DROP : 객체를 삭제

 - RENAME : 이름 변경

 - TRUNCATE : 데이터 삭제

 

 

1. CREATE 

 - CREATE [계정].[테이블] ([열이름] [자료형] [제약조건] , [열2이름] [자료형2] [제약조건2], ... );

 - 소유계정이름을 생략하고 CREATE TABLE 명령어를 사용하면 현재 접속해 있는 계정 소유의 테이블이 만들어진다.

 - 테이블 이름을 지정할 때는 대문자와 소문자를 구별하지 않는다.

 - 대문자와 소문자를 구별하여 테이블의 이름을 지정하려면 테이블 이름에 큰따옴표(“ “)를 사용하면 된다.

 - 각 열 별로 제약조건을 설정할 수 있다.

 

테이블 생성 규칙

 - 테이블 이름은 문자로 시작해야한다.(한글 가능) ex) EMP90 (가능), 90EMP (불가능)

 - 테이블 이름은 30byte 이하여야한다.(영어 30자,한글 15자)

 - 같은 사용자 소유의 테이블 이름은 중복될 수 없다.

 - 테이블 이름은 영문자,숫자와 특수 문자$,#,_를 사용할 수 있다. ex) EMP#90_OB

 - SQL 키워드는 테이블 이름으로 사용할 수 없다.

 

열 이름 생성 규칙

 - 열 이름은 문자로 시작해야 한다.

 - 열 이름은 30byte 이하여야 한다.

 - 한 테이블의 열 이름은 중복될 수 없다.

 - 열 이름은 영문자,숫자와 특수문자를 사용할 수 있다.

 - SQL 키워드는 열 이름으로 사용할 수 없다.

 

자료형

자료형은 크게 숫자형, 문자형, 날짜형 3가지로 나뉜다.

 

숫자형 (NUMBER)

 - [열이름] NUMBER( i , j )

 - i : 소수점 이하를 포함한 전체 자리수

 - j : 소수점 이하 자리수

 

문자형 

 - [열이름] [숫자 자료형]

숫자 자료형 설명
CHAR(N) 고정길이문자, 최대 2000 Byte , 디폴트는 1 Byte
VARCHAR2(N) 가변길이문자, 최대 4000 Byte, 디폴트는 1 Byte
NCHAR(N) 고정길이 유니코드 문자, 최대 2000 Byte, 디폴트는 1 Byte
NVARCHAR2(N) 가변길이 유니코드 문자, 최대 2000 Byte, 디폴트는 1 Byte
LONG 최대 2GB 크기의 가변길이 문자형
CLOB 대용량 텍스트 데이터 타입 (최대 4GByte)
NCLOB 대용량 텍스트 유니코드 데이터 타입(최대 4GByte)

 

날짜형 (DATE)

 - 년, 월, 일 등의 날짜 정보를 저장하기 위해 만들어진 데이터 유형

 - [열이름] DATE

 

 

제약 조건

 - 오라클에서 사용하는 제약 조건은 테이블의 특정 열에 지정한다.

 - 제약 조건을 지정한 열에 제약 조건에 부합하지 않는 데이터를 저장할 수 없다.

 - 제약 조건 지정 방식에 따라 기존 데이터의 수정이나 삭제 가능 여부도 영향을 받는다.

 

 

제약 조건

여기서 FOREIGN KEY (외래키) 의 경우에는

CREATE TABLE 테이블이름 (컬럼명 자료형 REFERENCES 참조테이블(참조할열))

와 같이 제약조건을 지정한다

 

CHECK 에서는 조건문을 넣어 주어야 한다.

 

이 외로 기본값을 정하는 DEFAULT가 있는데

DEFAULT는 제약 조건과는 별개로 특정 열에 저장할 값이 지정되지 않았을 경우에 기본값을 지정 할 때 사용한다.

제약 조건 확인

제약 조건 확인

 

 

제약 조건 이름 지정

 - 제약 조건에 이름을 지정 하려면 제약 조건 앞에 CONSTRAINT [제약조건이름] 을 설정해주면 된다.

 

위 내용들을 종합하여 가상의 테이블을 만들어 보자.

create table DDL_TEST1 (
    num1 number(4) primary key,
    num2 number(4,2) not null,
    char1 char(10) unique,
    char2 varchar2(10) check (length(char2)>5),
    char3 nchar(10) constraint ck check(length(char3) > 5),
    char4 nvarchar2(10) constraint uq unique,
    char5 long constraint nn not null,
    char6 clob default 'hello',
    char7 nclob default 'hello',
    date1 date not null);

제약 조건 확인을 위해  USER_CONSTRAINTS 데이터 사전을 활용한다.

select owner, constraint_name, constraint_type, table_name from USER_CONSTRAINTS;

제약 조건 확인

임의의 값을 넣어 행을 추가해보자.

insert into ddl_test1 
	values(1, 2.5, 'A', 'developer', 'test ddl', 'AA', 'test ddl', null, null, sysdate);
insert into ddl_test1 (num1, num2, char5, date1) values(2,25.55, 'test ddl2', '21/03/03');
insert into ddl_test1 (num1, num2, char5, date1) values(3,25.55, 'test ddl2', '21/03/03');

예시

제약조건이 CHECK 인 char6, char7에 DEFAULT 값인 hello 가 정상적으로 출력되는 것을 볼 수 있다.

제약조건이 UNIQUE인 char1, char4에는 중복된 값을 허용하지 않지만 null은 이와 상관없다는 것을 알 수 있다.

 

 

 

 

2. ALTER

 - ALTER 명령어를 이용하면 특정 열을 추가하거나 변경 삭제등을 할 수 있다.

 

ADD : 테이블에 열 추가

 

예시로 만들어 본 테이블에 임의의 열 하나를 추가해보자.

alter table ddl_test1 add test_column varchar2(10);

SELECT * FROM DDL_TEST1;

 

오른쪽 끝에 TEST_COLUMN이 정상적으로 추가된 것을 볼 수 있다.

 

RENAME : 열 이름 변경

 

추가된 열 이름을 바꾸어보자.

alter table ddl_test1 rename column test_column to rename_column;

SELECT * FROM DDL_TEST1;

MODIFY : 열 자료형 변경

 

이 열에 자료형을 변경해보자.

먼저 바꾸기 전의 자료형은 다음과 같다.

DESC DDL_TEST1;

alter table ddl_test1 modify rename_column number(5);

DESC DDL_TEST1;

MODIFY 를 이용해 바꾼 RENAME_COLUMN 의 자료형이 NUMBER로 바뀐 것을 확인할 수 있다.

 

제약조건도 추가할 수 있다.

제약조건 추가를 위해 UPDATE문을 이용하여 값을 추가해보자. UPDATE문은 DML을 다룰때 자세히 포스팅 할 예정이다.

update ddl_test1 set rename_column = 1234;

SELECT * FROM DDL_TEST1;

RENAME_COLUMN에 1234 라는 값이 정상적으로 들어갔다. 여기에 NOT NULL 제약조건을 추가해보자.

alter table ddl_test1 modify rename_column not null;

DESC DDL_TEST1;

 

DROP : 특정 열 삭제

 

이제 추가한 열을 다시 삭제해보자.

alter table ddl_test1 drop column rename_column;

SELECT * FROM DDL_TEST1;
DESC DDL_TEST1;

추가했던 열이 사라진 것을 볼 수 있다.

 

 

3. RENAME

 - 테이블 이름을 변경할 수 있다.

 

위에서 만든 테이블 이름을 변경해보자.

rename ddl_test1 to practice1;

변경 한 후 원래의 테이블을 조회해보면

 

SELECT * FROM DDL_TEST1;
DESC DDL_TEST1;

라는 오류가 발생한다. 

DDL_TEST1 대신에 PRACTICE1을 대입해보면

SELECT * FROM PRACTICE1;
DESC PRACTICE1;

정상적으로 출력되는 것을 확인할 수 있다.

 

 

4. TRUNCATE

 - TRUNCATE 명령어는 특정 테이블의 모든 데이터를 삭제한다

 

위 예시 테이블의 데이터를 모두 삭제해보자.

truncate table practice1;

위와 같은 메시지가 출력된다.

테이블을 조회해보면

SELECT * FROM PRACTICE1;

위와 같이 모든 값이 삭제되어 아무것도 남아 있지 않게 된다.

 

5. DROP

 - 테이블을 삭제하는 명령어

 

이제 마지막으로 테이블을 삭제해보자.

drop table practice1;

삭제되었다는 메시지가 출력되고, SELECT 문이나 DESC로 위 테이블을 조회해보면

SELECT * FROM PRACTICE1;
DESC PRACTICE1;

객체 자체가 삭제되어 존재하지 않는다는 오류 메시지가 출력된다.

반응형