TRUNCATE TABLE - 기존 사용하던 테이블의 모든 로우를 제거




- 테이블의 구조는 그대로 유지

- 테이블의 데이터와 할당된 공간만 해지

- 테이블에 생성된 제약 조건과 연관된 인덱스, 뷰 , 동의어는 유지


형식



TRUNCATE TABLE 테이블명;




1
truncate table a3;
cs



truncate table 을 사용하고나서 select는 안되지만 desc는 나타나는 것을 볼 수 있다.



DROP TABLE - 기존 테이블과 데이터 모두제거





삭제 불가능한 경우

- 삭제할 테이블의 기본 키나 고유 키를 다른 테이블에서 참조하고 있는 경우 

(참조하는 테이블(자식 테이블)을 먼저 제거후 제거해야한다.)



형식



DROP TABLE 테이블명;




1
drop table b1;
cs


DROP TABLE을 한 이후에는 테이블이 제거되었기 때문에 구조를 확인할 수 없다.







RENAME - 테이블을 포함한 객체의 이름을 변경하는 DDL명령문이다.





형식



RENAME 기존테이블명 TO 새테이블명




1
rename a1 to b1;
cs



테이블명이  변경되었기 때문에 이전 테이블명으로는 테이블 구조를 확인할 수 없고,

새로운 테이블명으로 확인 가능하다.




ALTER TABLE - 기존 테이블의 구조 변경을 하는 DDL명령어 입니다.




테이블을 생성하면서 컬럼의 추가, 수정, 삭제를 할 때 사용합니다.



컬럼추가



ALTER TABLE 테이블명

ADD(컬럼명 DataType);




컬럼을 추가하는 형식입니다.

-추가된 컬럼의 마지막 부분에 생성이 됩니다.

-수정할 테이블에 기존의 추가한 데이터가 존재하면 컬럼 값은 NULL로 입력됩니다.


1
alter table a1 add(age number);
cs


보이는 것과 같이 AGE 컬럼이 추가되었고, 데이터 값은 NULL로 입력됩니다.







컬럼변경

ALTER TABLE MODIFY 명령문을 이용하여 테이블에서의 컬럼의 타입, 크키, 기본 값 변경을 할 수 있다.




ALTER TABLE 테이블명

MODIFY(컬럼명 DataType);





기존 컬럼에 데이터가 없는 경우


-컬럼의 데이터 타입 변경이 자유롭다.


-컬럼의 크기 변경이 자유롭다.


 기존 컬럼에 데이터가 존재하는 경우


-데이터 타입 변경은 CHAR과 VERCHAR2만 가능하다.


-변경할 컬럼의 크기가 저장된 데이터의 크기보다 같거나 클 경우에만 가능하다.



1
2
alter table a1 modify(name varchar2(5));
alter table a1 modify(name varchar2(30));
cs



처음 name의 크기변경을 할 때 5보다 큰 데이터 값이 있기 때문에 변경 불가

기존 데이터 타입보다 큰 30으로 변경 가능 

name 의 데이터값이 변경된것을 확인할 수 있습니다.






컬럼제거


- 2개 이상의 컬럼을 가진 기존테이블의 특정 컬럼과 컬럼의 데이터 삭제 가능

- 한번의 하나의 컬럼만 삭제가 가능

- 삭제된 컬럼은 복구 불가능




ALTER TABLE 테이블명 DROP COLUMN 컬럼명;




1
alter table a1 drop column age;
cs



삭제된 것을 볼 수 있습니다.






SET UNUSED


시스템의 요구가 적을 때 컬럼을 제거할 수 있도록 하나 이상의 칼럼을 UNUSED로 표시한다.

실제로 테이블에서 제거되지 않는다. 


사용이유

테이블에 저장된 내용이 많을 경우 컬럼 삭제시 많은 시간이 소요된다. 그 시간중에 다른 사용자가 컬럼에 접근하면 , 테이블이 사용되고 있기에 다른 사용자는 해당 테이블을 이용할 수 없다. 이럴경우 rock이 발생하게된다. 

SET UNUSED옵션은 DROP명령 실행시 걸리는 시간보다 응답시간이 빠르고, UNUSED로 표시된 컬럼은 데이터가 존재해도 삭제된 것으로 처리되기 때문에 사용한다.


테이블에서 id제거하기


1
alter table a2 set unused(id);
cs



실제로 컬럼명이 나타나지 않는 것을 볼 수 있다. 

하지만 실제로 제거된 것이 아니다. 




테이블에서 현재 UNUSED로 표시된 모든 컬럼 제거하기


1
alter table a2 drop unused columns;
cs




CREATE TABLE - 새로운 테이블을 생성하는 DDL명령어



테이블을 생성하기 전에 cmd 창을 켜야합니다. 

sqlplus 를 키거나 다음화면처럼 실행해주세요!



저는 cmd창을 사용하기때문에 sqlplus 를 치고, 제가직접만든 hr 계정에 테이블을 만들기 위해 hr 비밀번호를 입력해주었습니다.


그리고 테이블을 생성해보겠습니다! 테이블을 생성하는 법은

CREATE TABLE 테이블명(컬럼명 컬럼Data Type); 입니다.




1
2
3
4
5
create table a1(
num number,
id varchar2(20),
name varchar2(20)
);
cs


a1 = 테이블명

num, id, name = 컬럼명

number, varchar2(20) = 컬럼 Data Type




DESC 테이블명;  - 테이블 조회





테이블을 생성하고 확인까지 하였습니다. 

이번에는 테이블 안에 Data 를 넣어보겠습니다.




INSERT INTO 테이블명 VALUES('데이터','데이터',..); - 데이터 넣기



1
2
3
4
5
6
insert into a1 values(1,'a1','aa');
insert into a1 values(1,'a2','bb');
insert into a1 values(1,'a3','cc');
insert into a1 values(2,'a4','dd');
insert into a1 values(2,'a5','ee');
insert into a1 values(2,'a6','ff');
cs



[set linesize 값;] 은 화면크기를 설정하는 쿼리문 입니다.

[select * from 테이블명;] 은 테이블 안의 데이터를 모두 나타내는 쿼리문 입니다.


테이블 만들기는 끝!



이제 기존 테이블과 동일한 내용과 구조를 같은 테이블을 AS절을 추가하여 만들어 보겠습니다.



CREATE TABLE 새테이블명 AS SELECT * FROM 기존테이블명;






1
create table a2 as select * from a1;
cs

테이블 a1과 테이블 a2의 데이터가 동일한 것을 볼수있습니다.




굳이 * 을 사용하지 않고 * 대신 원하는 컬렴명을 적으면 원하는 컬럼만 복사하여 테이블을 만들 수 있습니다.


1
create table a3 as select id,name from a1;
cs


또 쿼리문 뒤에 WHERE 조건절을 추가하여 원하는 조건을 제시하면 일부의 행만 복사할 수 있습니다.


1
create table a4 as select * from a1 where num1
cs




WHERE 조건절에 항상 거짓인 조건을 주면 테이블 구조만 복사하는 쿼리문이 됩니다.


1
create table a5 as select * from a1 where 1=0;
cs



보이는 것 처럼 SELECT를 써도 데이터가 없어서 뜨지않지만 테이블 구조는 복사되어 생성되었습니다.













+ Recent posts