데이터 정의어 (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);
오른쪽 끝에 TEST_COLUMN이 정상적으로 추가된 것을 볼 수 있다.
RENAME : 열 이름 변경
추가된 열 이름을 바꾸어보자.
alter table ddl_test1 rename column test_column to rename_column;
MODIFY : 열 자료형 변경
이 열에 자료형을 변경해보자.
먼저 바꾸기 전의 자료형은 다음과 같다.
alter table ddl_test1 modify rename_column number(5);
MODIFY 를 이용해 바꾼 RENAME_COLUMN 의 자료형이 NUMBER로 바뀐 것을 확인할 수 있다.
제약조건도 추가할 수 있다.
제약조건 추가를 위해 UPDATE문을 이용하여 값을 추가해보자. UPDATE문은 DML을 다룰때 자세히 포스팅 할 예정이다.
update ddl_test1 set rename_column = 1234;
RENAME_COLUMN에 1234 라는 값이 정상적으로 들어갔다. 여기에 NOT NULL 제약조건을 추가해보자.
alter table ddl_test1 modify rename_column not null;
DROP : 특정 열 삭제
이제 추가한 열을 다시 삭제해보자.
alter table ddl_test1 drop column rename_column;
추가했던 열이 사라진 것을 볼 수 있다.
3. RENAME
- 테이블 이름을 변경할 수 있다.
위에서 만든 테이블 이름을 변경해보자.
rename ddl_test1 to practice1;
변경 한 후 원래의 테이블을 조회해보면
라는 오류가 발생한다.
DDL_TEST1 대신에 PRACTICE1을 대입해보면
정상적으로 출력되는 것을 확인할 수 있다.
4. TRUNCATE
- TRUNCATE 명령어는 특정 테이블의 모든 데이터를 삭제한다
위 예시 테이블의 데이터를 모두 삭제해보자.
truncate table practice1;
위와 같은 메시지가 출력된다.
테이블을 조회해보면
위와 같이 모든 값이 삭제되어 아무것도 남아 있지 않게 된다.
5. DROP
- 테이블을 삭제하는 명령어
이제 마지막으로 테이블을 삭제해보자.
drop table practice1;
삭제되었다는 메시지가 출력되고, SELECT 문이나 DESC로 위 테이블을 조회해보면
객체 자체가 삭제되어 존재하지 않는다는 오류 메시지가 출력된다.