ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TABLE생성과 수정
    Oracle-diary/DDL 2020. 1. 29. 19:08
    요약
    테이블 생성 명령어&SUBQUERY create table 테이블명 as subquery문
    테이블 구조 변경하기 alter table 테이블명
    add column명 or rename column명 or modify column명 column의 성질 or drop column column명
    TRUNCATE 모든 ROW를 지운다.
     
     
     
     
     
    --------------------------------------------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------------------------------------------
    테이블생성 명령어와 subquery문
     
    Create table문에도 subquery문이 적용이 된다.
    기존에 있는 테이블의 내용을 전부 복사해 새로운 테이블을 만들 수도 있다.
     
    create table 테이블명
    as
    subquery문
     
    SQL>CREATE TABLE COPY_EMP2
    2 AS <-AS를 이용하자
    3 SELECT*FROM EMP; <-SUBQUERY문
     
    테이블이 생성되었습니다. <-EMP TABLE 내용에 있는 것을 그대로 가져 오는것
     
     
     
    QL> CREATE TABLE COPY_EMP2
    2 AS
    3 SELECT*FROM EMP;
    WHERE DEPTNO =10 <-10번번호를 가진 ROW만 그대로 가져 온다.
     
    테이블이 생성되었습니다.
     
    ----------------------------------------------------------------------------------------------------------------------
    테이블 구조 수정하기
    alter table 테이블명
    add column명 or rename column명 or modify column명 column의 성질 or drop column column명
     
    add column명
    ex) alter table emp
    add (hp varchar2(8)) <-핸드폰 번호 쓰는란을 추가해 보자 !
    >desc emp
     
    *insert문과 add문의 차이
    ROW를 바꿀땐 INSERT INTO이며 구조를 바꾸진 않는다 add는 테이블의 구조를 바꾸게 된다.
     
    rename column명
    table 안에 열의 이름 변경이다. 별칭과는 다르다. 나타나는 것은 같을 수 있다.
    alter table emp
    rename column hp
    to mp;
     
    modify column명 column의 성질
    alter table emp
    modify mp varchar2(13); <-핸드폰 번호는 13자리니까 변경. data type을 변경 하는것
     
    drop column column명
    drop
    alter table emp
    drop column mp; <-내용 삭제
     
    DROP TABLE COPY_EMP; <-테이블 삭제
     
    *주의할 점
    하지만 이러한 DDL 명령들이 빈번하게 일어나면 안된다. 오직 프로젝트 초기에만 변경을 허용하지만
    DB가 운영중인 과정에서 이러한 변경이 일어나면 연쇄반응이 일어나서 관련된 모든 것들이 변경된다.
    관리자가 이름 두줄 바꾸면 개발자는 2주동안 야근하면서 객체,UI등 관련된 모든것들을 바꾸어야한다.
     
     
    *DROP과 DELETE의 차이
    둘다 테이블을 지운다는 공통점이 있지만
     
    DELETE QUERY문 <-AUTOCOMMIT이 안일어난다.
    DROP DDL 문 <-AUTOCOMMIT이 일어난다.
     
    즉 DROPD은 ROLLBACK이 안일어난다.
    DELETE는 ROLLBACK이 일어난다.
     
    DROP은 존재를 전부 지운다 <- 회사에선 위험할 수 있다. 구조까지 지워버리기 때문.
    DELETE는 테이블의 구조는 남아있다.
     
    *휴지통 기능
    DROP에서 발생하는 사고를 방지하기 위해서
    최신 버전에는 휴지통이라는 기능이 남아있다.
    SHOW RECYCLEBIN을 치면 휴지통에 있는 TABLE이 있다.
    *PURGE기능
    휴지통을 거치지 않고 지워지는 방법
     
    DROP TABLE COPY_EMP1 PURGE;
     
    휴지통이 지워지는 방법
    PURGE RECYCLEBIN;
     
    휴지통에 있는 테이블을 다시 꺼내려면
    FLASHBACK TABLE COPY_EMP1
    TO BEFORE DROP; 이다. <-제조사마다 있을 수도 없을 수도 있는 기능
     
    ------------------------------------------------------------------------------------------------------------------------
    TRUNCATE란?
    DELETE 명령어와 유사한 기능으로 모든 ROW를 삭제하는 명령
     
    *DELETE와 TRUNCATE의 차이
    DELETE는 DML이다.
    TRUNCATE는 DDL이다.
    TRUNCATE가 지우는데 더 빠르게 지운다. 바로지우기 때문이다.
    TRUNCATE는 일부가 아닌 전부 지우는것 밖엔 안된다.(DELETE CEMP WHERE DEPTNO =10 ;가 가능하다.)
     
     
    DDL:CREATE,ALTER,DROP,RENAME,TRUNCATE,COMMENT <-AUTOCOMMIT이 발생한다. ROLLBACK 불가.

    'Oracle-diary > DDL' 카테고리의 다른 글

    테이블 생성 &열의 성질  (0) 2020.01.29
    data dictionary와 주석  (0) 2020.01.29

    댓글

Designed by Tistory.