본문 바로가기

Oracle

8.DDL

DDL(데이터정의어)
테이블의 구조 자체를 생성,수정 제거하도록 하는 명령문 집합.
CREATE TABLE(가장 기본적인 테이블 생성방법)
CREATE TABLE문으로 테이블에 대한 구조를 정의데이터를 저장하는 공간을 할당
만들때의 규칙
반드시 문자로 시작해야 한다.
·         1~30자까지 가능하다.
·         A~Z까지의 대소문자, 0~9까지의 숫자특수기호는 ('_', '$', '#') 포함 가능하다.
·         오라클에서 사용되는 예약어나 다른 객체명과 중복이 불가능하다.
·         공백을 허용하지 않는다.

테이블 생성의 기본형식 

CREATE TABLE [테이블 이름] (칼럼이름  타입(),칼럼이름  타입());

not null : 무결성 제약 조건중하나 이 칼럼은 널 값으로생성될수없다 꼭 값이 들어가야함
primary key : 제약조건중 하나 중복된 값을 넣을 수 없다.

desc 테이블이름;   <<으로 생성된 테이블의 칼럼, 타입이 표시되는 테이블 구조를 확인할수있다.



쿼리문을 이용해 똑같은 테이블을 만들수있다
만드는 코드는 
create table [만드는 테이블이름] as select * from [복사할 테이블이름];

구조를 만들었으니 정보를 넣어보자 

intsert into [테이블 이름] values(id,name,age,grade,address,email,year);
() 안의 내용은 칼럼에 순서에 맞추고 문자라면 ' ' 에 넣어준다.
결과

이렇게 만든 테이블 , 만약 구조는 같은데 이름이 다른 테이블을 원할때 다시 코딩할라니깐 개귀찮음 
이럴땐 테이블을 복사할수있다.
코드

create table member2 는 멤버 2라는 테이블을 만들때 쓴다 하지만 우리는 복사를 하는것,
as문 의 뒤에 테이블을 출력하는 select * from member; << 를 쓰면 
member테이블을 화면에 출력하는것이 아니라member2에 데이터를 복사해서 새로 만든다.,

만약 create table member2 as select id, name... 과 같이 칼럼을 지정해서 복사할경우에는
지정한 칼럼의 칼럼수, 데이터 타입을 일치하게 쓰고 복사될 대상 칼럼도 일치 해야한다, 그러니깐
select id number not null, << 같이 써줘하는거 이경우에 무결성 제약조건은  not null조건만 복사하고 기본키,외래키 등의 조건은 
복사되지 않는다.

복사하는 방법은 여러가지가있다. 특정 로우에 대한 특정 정보만 뽑아 새로 테이블을 만드는방법,
특정 칼럼만 선정해 구조만 복사 하는방법등 함수를 이용하면 다양한 정보들을 자기 입맛대로 복사해서 사용할수있다.


구조를 변경하는 ALTER TABLE문
칼럼추가


테이블에 새로운 칼럼추가 
추가되는 칼럼은 항상 마지막에 생성되므로 위치 변경이 불가하다. 
ALTER TABLE 테이블명 ADD (칼럼명데이터 타입);


칼럼추가 하기전


칼럼 추가 후

tel 칼럼이 추가 된것을 확인할수있다.

칼럼 변경

칼럼의 이름과 타입의 변경이 가능하다

어드레스의 타입의 수를 변경할꺼다 VARCHAR2(10)-> VARCHAR2(20) 으로

변경후,
어드레스칼럼의 VARCHAR2(10)이 VARCHAR2(20) 으로 변경된것을 확인할수있다.  

칼럼을 변경할때 칼럼에 값이 들어가 있다면 타입은 변경이 불가하고 예외로 변경할수있는 타입은 
CHAR, VARCHAR2 타입 뿐이다 그리고 기존의 값데이터수와 같거나 그 이상의 수로만 변경이가능하다.

여기서 막간 설명하자면 
CHAR는 고정형 , VARCHAR2가변형이다.
만약 CHAR형의 데이터수를 10을 지정한뒤 4글자 정도를 쓴다면 나머지 6칸의 공간은 비는게아니라 널값이 들어가있다.
쓸데없이 공간을 차지하게되는 것
VARCHAR2의경우 지정한 데이터의 수보다 적은 값이 들어가면 남는 칸은 들어간 데이터의 값에 맞추어 줄인다.
배열의 제네릭 같은 느낌 보통 VARCHAR2 을 가장많이 사용한다.



칼럼 삭제

위에서 추가한 tel칼럼을 삭제해보자 이때 삭제되는 칼럼은 다시 복구가 불가능하다.
두개 이상의 칼럼이 있어야만 삭제할수있다.

ALTER TABLE 테이블명 DROP COLUMN [삭제할 칼럼명]

위에서 desc문으로 확했을때 있던 TEL칼럼이 없어진것을 확인할수있다.

테이블명을  변경하는 RENAME문
테이블의 이름을 변경해보자

RENAME 기존테이블명 TO 새로운 이름;
으로 변경이 가능하다.

이름이 바뀌고 나서는 예전이름으로는 작동이 불가능하다. 

테이블 구조를 제거하는 DROP TABLE문

DROP TABLE 삭제할 테이블이름;
으로 테이블의 삭제가가능하다. 이방법은 아에 테이블이 사라지고 복구도 불가능하니 신중히 사용할것.



 테이블의 모든 데이터를 제거하는 TRUNCATE TABLE문

TRUNCATE TABLE 삭제할 테이블이름

테이블을 삭제하는것이 아니라 테이블안의 내용을 모두 삭제한다. 

데이터가 없으니 볼수없다. 
하지만 구조는 남아있기때문에 구조는 볼수있다

SET UNUSED

만약 데이터 베이스의 데이터가 방대하다만 삭제하는데에 오랜 시간이 걸린다.
그리고 이 테이블이 다른 테이블에서 참조하는 테이블이라면 삭세하는 동안 멈춰있기때문에 문제가 생긴다.
이때 이 코드를 사용한다. 
ALTER TABLE 테이블이름 SET UNUSED(삭제할 칼럽내용);
이렇게하면 해당칼럼은 실제로는 삭제된것이 아니지만 삭제된것같이 동작한다.  그 사이  작업을 완료하고
시간이 괜찮을떄 삭제작없을 실시한다. 
SET해놓은 칼럼을 삭제할때는 ALTER TABLE [삭제할테이블이름 ]DROP INISED COLUMNS를 사용한다.


'Oracle' 카테고리의 다른 글

10. 트랜젝션  (0) 2018.04.23
9.DML  (0) 2018.04.23
7.그룹함수  (0) 2018.04.23
데이터베이스 보안  (0) 2018.04.23
데이터베이스 모델링  (0) 2018.04.23