[Oracle] SQL 명령어들 - DDL (create, alter, drop, truncate)
- DDL
: Data Definition Language 데이터 정의어
: 객체를 생성,변경,제거 기능을 담당하는 명령어. : DDL 명령어 실행 시 자동 commit된다.
- 객체 : table,index,user,sequence,....
table 생성 : create table 테이블명....
index 생성 : create index 인덱스명....
user 생성 : create user 유저명...
DDL 명령어 특징
1. commit, rollback 의미가 없다.
2. DDL 명령어가 실행되면, 자동 commit됨.
=> rollback을 하고싶으면, rollback 먼저실행하고, ddl 명령어를 실행 해야함
DDL 명령어 1. create : 객체(table) 생성 2. alter : 객체 수정. 객체 구조 변경 3. drop : 객체 제거 4. truncate : 객체와 데이터 분리
1. CREAT : 생성
: 테이블 생성.
CREATE (생성)
table 생성 : create table 테이블명
index 생성 : create index 인덱스 이름
user 생성 : create user 유저 이름
💡 한번 생성된 테이블은 다시 생성 불가능하다. drop(삭제) 후 다시 create생성.
예시 : ddl_test 테이블 생성하기
create table ddl_test
(
no number(3), -- 최대 숫자 3자리 형태로 데이터 저장
name varchar(10), -- 최대 10 바이트 문자 형태 데이터 저장. 한글:3바이트
birth date default sysdate --날짜시간 데이터 저장. 기본값을 현재일시로 저장
)
자료형
- number,integer : 숫자 형태의 데이터 저장 자료형
- char, varchar, varchar2 : 문자 형태의 데이터 저장 자료형
- date : 날짜 시간 정보를 저장 자료형
💡
- 테이블 생성 시 주의 사항
1. 테이블 이름은 반드시 문자로 시작해야 합니다. (숫자로 시작할 수 없다. 숫자가 포함되는 것은 가능. 특수 문자도 가능하지만 테이블 생성시 “ (겹따옴표)로 감싸야 하며 권장하지 않는다.)
2. 테이블 이름이나 컬럼 이름은 최대 30 bytes 까지 가능합니다.
3. (한글로 테이블 이름을 생성할 경우 최대 15글자 까지만 가능)
4. 테이블 이름은 한 명의 사용자가 다른 오브젝트들의 이름과 중복으로 사용할 수 없다. 예를 들어 scott 사용자가 테이블명을 test 로 생성한 후 인덱스 이름을 test 로 동일하게 사용할 수 없다는 것입니다. 그러나 scott 사용자가 test 테이블 만들어도 다른 사용자인 hr 사용자는 test라는 테이블 이름을 사용할 수 있습니다.
5. 테이블 이름이나 오브젝트 이름을 오라클이 사용하는 키워드를 사용하지 않기를 권장한다. 오라클 키워드라 함은 오라클에서 사용하는 미리 정해진 SELECT , FROM 등과 같은 단어들을 말한다. 생성이 안되는 것은 아니지만 사용 시에 아주 불편하고 위험 할 수도 있기에 절대로 사용하지 말기를 권장한다.
- primary key : 기본키. 레코드내용이 유일한 의미를 가지는 컬럼. : 컬럼의 값이 테이블 내에서 유일. 중복안됨.
- Primary key가 있고 없고 의 차이 비교
nsert into ddl_test2 (no) values(1)
select * from ddl_test2 => no 컬럼의 값이 중복가능
- primary key 있는 경우.
create table ddl_test3
(
no number(3) primary key,--기본키 primary key 유일하게 설정가능한 데이타
name varchar(10) default '홍길동',
birth date default sysdate
)
insert into ddl_test3 (no) values(1)
select * from ddl_test3
2. ALTER : 객체 구조 변경
: 기존 객체의 구조를 변경하는 명령어.
: 컬럼을 추가 또는 삭제 변경 등이 가능함
💡
이 명령어는 부하가 많이 걸리는 명령어이므로 사용량이 많은 시간에 수행하는 것은 아주 위험하니 특히 조심해야 한다.
예시 : dept2테이블을 dept3테이블로 복사하기.
create table dept3 as select * from dept2
select * from dept3
--- 새로 추가한 컬럼은 가장 뒷단에 들어간다. 위치 변경 불가.
예시 : dept3테이블에 tel 컬럼 추가하기.
alter table dept3 add tel varchar(20)
select * from dept3
rollback
예시 : dept3테이블에 tel 컬럼을 phone 으로 변경하기.
alter table dept3 rename column tel to phone
select * from dept3
예시 : dept3 테이블에 area컬럼의 크기를 30으로 변경하기.
desc dept3
alter table dept3 modify area varchar(30)
desc dept3
- 저장된 데이터의 크기가 10보다 큰 경우, 작아지는 쪽으로 크기 변경 안됨.
💡
varuable character 가변 문자?
varchar 쓰면 varchar2(최대 4000 bite 저장가능)로 자동으로 오라클이 바꾸어준다.
예시 : dept3 테이블에 phone컬럼의 크기를 10으로 변경하기.
alter table dept3 modify phone varchar(10) --실행됨
desc dept3
3. DROP : 객체 제거
: 객체 제거. 객체 제거 시 내용도 삭제. 복구 불가. (rollback 불가능.)
예시 : dept3 테이블 제거하기
drop table dept3
desc dept3
예시 : ddl_test 테이블 제거하기
drop table ddl_test
4. TRUNCATE : 내용 제거
: 내용 제거. 삭제 속도가 빠르다.
: DELETE 명령어는 rollback 가능. truncate 명령어는 DBL rollback 불가.
💡
delete 버퍼를 계속 유지해서 지움. 많은 데이터일때는 다 지울수없음. 삭제 가능하더라도 컴퓨터 성능이 안 좋아진다. 하지만, truncate는 깨끗하게 빠른 삭제 가능. 쓰레기 데이터에만 쓰기!
예시 : select * from ddl_test2
truncate table ddl_test2
select * from ddl_test2 -- 내용 삭제됨.
rollback -- 실행안됨.