본문 바로가기

카테고리 없음

DB_DDL_테이블작업


DDL


구조를 만들고 변경하고 삭제하는 SQL

성공하면 철회를 할 수 없습니다.

{테이블 생성}

create table 테이블이름(

컬럼이름 자료형 제약조건,

컬럼이름 자료형 제약조건,

....

테이블 제약조건)

{자료형}

1. char(사이즈): 사이즈까지의 문자열을 고정으로 저장하는 자료형

2. varchar2(사이즈): 사이즈까지의 문자열을 가변으로 저장하는 자료형

한글은 일반적으로 2개를 1개의 문자로 간주하지만 사용하는 접속 도구에 따라서 3개를 1문자료 간주하는 경우도 있습니다.

SQL Developer에서는 3개를 1개를 한글문자로 간주합니다.순번 있는 내용1

char(10) 으로 설정한 경우 : 3개의 문자만 저장하더라도 항상 10byte를 할당받아서 나머지는 공백으로 채워 넣습니다.

varchar2(10)으로 설정하고 3개의 문자를 저장하면, 처음에는 10byte를 할당받았다가 3개의 저장공간을 제외한 공간은 없애버립니다.

- 메모리 효율 면에서는 varchar2 가 좋지만 varchar2는 수정이 발생하는 경우 잘못하면 많은 양의 데이터가 이동해야 하는 상황이 벌어질 수 있습니다.

- 이렇게 많은 양의 데이터가 이동하는 것을 row migration(행 이주)이라고 합니다.

3. number(전체자릿수, 소수자릿수): 숫자를 저장하고자 하는 경우 사용.

자릿수를 생략하면 38자리로 생성됩니다.

정수를 입력하고자 하는 경우는 소수자릿수를 생략하면 됩니다.

4. Date: 날짜와 시간을 저장하는데 1/1000초 까지 저장 가능

5. Timestamp: 날짜와 시간을 1/1000000초 까지 저장

6. CLOB: 긴 문자열을 저장할 때 사용

1000자 이상의 문자를 저장할 때 사용

이 자료형을 사용하면 인덱스(빠르게 검색하기 위해서 설정하는 것) 생성을 못함

7. BLOB: 큰 바이트를 저장할 때 사용

파일의 내용을 저장하고자 할 때 사용

머신러닝 분야 등에서 이미지의 내용을 저장하고자 할 때 사용


ex) 블로그 게시글 정보를 저장 하는 테이블


create table blog(

category char(10),

nick varchar2(10),

title char(50),

day varchar2(10),

text CLOB);

--테이블 구조 확인

desc 테이블이름;

{기존 테이블의 검색결과를 가지고 테이블 생성}

create table 테이블이름

as

select 구문

ex) dept 테이블의 모든 데이터를 가지고 있는 deptcopy 테이블 생성

create table deptcopy

as

select *

from dept;

ex2) dept 테이블의 구조만 복사해서 depttemp 테이블 생성

-- 데이터는 복사하지 않도록.

create table depttemp

as

select *

from dept

where 1 = 0;



{alter table}

테이블의 구조를 변경하는 명령어
컬럼을 추가하거나 삭제 그리고 변경을 하는 명령어
alter table 명령은 모든 관계형 데이터베이스에 존재하지만 실제 사용하는 방식으로 조금씩 다릅니다.

1. 컬럼 추가
alter table 테이블이름
add(컬럼 자료형 제약조건);

2. 컬럼 수정: 기존 데이터가 있는 경우 주의해야 합니다.
∵자료형이 있는 경우 기존 데이터가 삭제될 수 있습니다.
alter table 테이블이름
modify(컬럼이름 자료형 제약조건);

3. 컬럼 삭제
alter table 테이블이름
alter table 테이블이름
drop column 컬럼이름;

4. 컬럼의 사용을 못하도록 하기(오라클에만 있는 것)
alter table 테이블이름
set unused(컬럼이름);
실제 삭제시에는
alter table 테이블이름
drop unused columns;
∵데이터가 많은 경우에 컬럼을 삭제하게 되면 락[각주:1]이 걸려 시간이 오래 걸립니다. unused를 사용하면 해당 컬럼 사용만 금지 시켜 놓고 사용을 하지 않는 시간에 실제 삭제를 수행합니다.

create table deptcopy
as
select*
from dept
where 0=1;

ex1)deptcopy 테이블에 한글 5자까지 저장할 수 있는 location이라는 컬럼 추가
-->한글 원래 2자당 1문자라고 했다. 하지만 도구에 따라 3자당 1문자일 수있으므로15자로 설정.(접속 도구에 따라서 한글은 2 또는 3byte로 저장하기 때문에 되도록이면 글자수 *3을 하는 것이 좋습니다)
alter table deptcopy
add(location char(15));

ex2)deptcopy 테이블에 location 컬럼의 크기를 한글 10자를 저장할 수 있도록 변경
alter table deptcopy
modify(location char(30));

ex3)location 삭제
alter table deptcopy
drop column location;

{테이블 삭제}

drop table 테이블이름;
- 외래키로 설정된 컬럼이 있으면 테이블 삭제는 안됨.

ex1)deptcopy 테이블 삭제
drop table deptcopy;
ex2)dept 테이블 삭제
drop table dept;
--emp 테이블에 dept 테이블 쪽으로 외래키가 설정되어 있기 때문에 테이블은 삭제되지 않습니다.
--dept테이블 같은 테이블을 삭제하고자 하면, 외래키 설정을 해제 하던지 외래키를 가지는 테이블(emp)을 먼저 삭제해야 함.

{테이블의 모든 데이터 삭제}

truncate table 테이블이름;
- 테이블 구조는 남겨두고 데이터만 모두 삭제
- 데이터가 전부 삭제되지 않는 경우가 발생할 수 있는데 외래키로 설정되어 있는 경우입니다.

{테이블 이름 변경}

rename 예전이름 to 원본이름;
- 그닥 많이 사용하지는 않는 명령.



  1. 수정, 삭제를 하게 되면 기본적으로 다른작업을 할 수 없도록 락이 걸립니다. [본문으로]