SQL

테이블에 새로운 컬럼 추가, 삭제

에어팟맥스 2022. 7. 19. 17:19

----- ***** 어떤 테이블에 새로운 컬럼 추가하기 ***** -----

 

alter table  테이블명 add 추가할 컬럼명 데이터타입;

 

   desc TBL_JIKWON;
   
   alter table TBL_JIKWON add salary number(5);
   -- Table TBL_JIKWON이(가) 변경되었습니다.
   
   select *
   from TBL_JIKWON;

 

 


----- ***** 어떤 테이블에 컬럼 삭제하기 ***** -----

 

alter table  테이블명 drop column 삭제할컬럼명;

 

   alter table TBL_JIKWON drop column salary;
   
   desc TBL_JIKWON;

 

 

 


----- ***** 어떤 테이블에 새로운 컬럼 추가하고 NOT NULL 을 주기 ***** -----

 

-- 1. 해당 테이블에 데이터가 전혀 없는 경우

   alter table TBL_JIKWON add salary number(5) NOT NULL;
   
   desc TBL_JIKWON;

 

 

-- 2. 해당 테이블에 데이터가 존재하는 경우 

   insert into tbl_buseo values(10, '관리부');
   -- 1 행 이(가) 삽입되었습니다.
   
   insert into TBL_JIKWON values(1001, '이순신', 'leess@gmail.com','사장',10, 9000);
   -- 1 행 이(가) 삽입되었습니다.
   
   commit;
   
   select *
   from tbl_jikwon;
   
   -- salary 컬럼 삭제
   alter table tbl_jikwon drop column salary;
   -- Table TBL_JIKWON이(가) 변경되었습니다.
   
   select *
   from tbl_jikwon;
   
   alter table TBL_JIKWON add salary number(5) NOT NULL;
   -- ORA-01758: 테이블은 필수 열을 추가하기 위해 (NOT NULL) 비어 있어야 합니다.
   -- TBL_JIKWON 테이블에 행이 1개도 없어야 한다는 말이다.

 

alter table  테이블명 add 추가할 컬럼명 데이터타입 DEFAULT 기본값 not null;

   alter table TBL_JIKWON add salary number(5) default 0 NOT NULL;
   -- Table TBL_JIKWON이(가) 변경되었습니다.
   
   update tbl_jikwon set salary = 9000
   where jikwon_no = 1001;
   -- 1 행 이(가) 업데이트되었습니다.
   
   commit;
   
   select *
   from tbl_jikwon;

 

 


---- ===== ***** 어떤 테이블에 존재하는 컬럼의 데이터타입 변경하기 ***** ===== -----

 

-- 1. 해당 컬럼에 데이터가 모두 NULL 인 경우

 

alter table 테이블명 modify 컬럼명 새로운타입명;

 

   alter table tbl_jikwon modify hire_date date;
   
   desc tbl_jikwon;
   -- HIRE_DATE           DATE 
   
   select * from tbl_jikwon;

 

 

-- 2. 해당 컬럼에 데이터가 NULL 이 아닌 값이 들어가 있는 경우
   --    데이터타입의 크기의 변경은 이미 들어가있는 데이터값보다 작게는 불가하지만 크게는 가능하다.

 

   alter table tbl_jikwon modify salary varchar2(10);
   -- ORA-01439: 데이터 유형을 변경할 열은 비어 있어야 합니다
   -- 해당 컬럼에 데이터가 모두 null 일 때만 새로운 타입으로 변경할 수 있다.

 

   desc tbl_jikwon;
   -- SALARY     NOT NULL NUMBER(5) 
   
   select * from tbl_jikwon;
   -- salary  9000  number(4)
   
   alter table tbl_jikwon modify salary NUMBER(3);
   -- ORA-01440: 정도 또는 자리수를 축소할 열은 비어 있어야 합니다
   
   alter table tbl_jikwon modify salary NUMBER(8);
   -- Table TBL_JIKWON이(가) 변경되었습니다.
   
   desc tbl_jikwon;
   -- SALARY     NOT NULL NUMBER(8)

 


----- ***** 어떤 테이블에 존재하는 컬럼의 이름 변경하기 ***** -----

 

alter table 테이블명 rename column 현재컬럼명 to 새로운컬럼명;

 

   alter table TBL_JIKWON rename column SALARY to SAL;
   -- Table TBL_JIKWON이(가) 변경되었습니다.
   
   desc tbl_jikwon;
   -- SAL        NOT NULL NUMBER(8)

 

 


----- ***** 테이블의 테이블명 변경하기 ***** -----

 

rename 현재테이블명 to 새로운테이블명; 

 

   rename tbl_jikwon to jikwon; 
   -- 테이블 이름이 변경되었습니다.
   
   select * from tbl_jikwon;
   -- ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
   
   select * from jikwon;
   
   rename jikwon to tbl_jikwon; 
   -- 테이블 이름이 변경되었습니다.

 


----- ===== ***** 테이블의 어떤 컬럼에 DEFAULT 값 조회하기 및 DEFAULT 값 변경하기 ***** ===== -----

 

-- tbl_jikwon 테이블의 컬럼에 존재하는 DEFAULT 값 조회하기

   select column_name, data_type, data_default
   from user_tab_columns
   where table_name = 'TBL_JIKWON';
   
   alter table TBL_JIKWON modify hire_date default sysdate;
   -- Table TBL_JIKWON이(가) 변경되었습니다.
   -- HIRE_DATE	DATE	sysdate
   
   alter table TBL_JIKWON modify sal default 500;
   -- SAL	NUMBER	500

 

----- ***** 테이블의 어떤 컬럼에 주어진 default를 삭제하려면 default 값으로 null 을 주면 된다.

   alter table TBL_JIKWON modify hire_date default null;
   -- Table TBL_JIKWON이(가) 변경되었습니다.
   -- HIRE_DATE	DATE	null

 

 


---- !!!![중요] 테이블을 생성한 이후에 웬만하면 테이블명에 대한 주석문을 달아주도록 합시다.!!!! ----

 

--- *** 테이블명에 달려진 주석문 생성, 조회하기 *** --

   select *
   from user_tab_comments;
   
   comment on table TBL_JIKWON
   is '우리회사 사원들의 정보가 들어있는 테이블';
   -- Comment이(가) 생성되었습니다.

 


---- !!!! 테이블을 생성한 이후에 웬만하면 컬럼명에 대한 주석문을 달아주도록 합시다.!!!! ----

select * 
   from user_col_comments
   where table_name = 'EMPLOYEES';
   
   
   select * 
   from user_col_comments
   where table_name = 'TBL_JIKWON';
      
   comment on column TBL_JIKWON.JIKWON_NO is '사원번호 Primary Key';  -- Comment이(가) 생성되었습니다.
   comment on column TBL_JIKWON.JIKNAME is '사원명 NOT NULL';     -- Comment이(가) 생성되었습니다.
   comment on column TBL_JIKWON.EMAIL is '이메일';  -- Comment이(가) 생성되었습니다.
   comment on column TBL_JIKWON.JIKKUB is '직급 사장,이사,부장,과장,대리,사원 만 가능함';     -- Comment이(가) 생성되었습니다.
   comment on column TBL_JIKWON.FK_BUSEONO is '부서번호 TBL_BUSEO 테이블의  BUSEONO 컬럼을 참조하는 외부키 컬럼입니다.';  -- Comment이(가) 생성되었습니다.
   
   select column_name, comments  
   from user_col_comments
   where table_name = 'TBL_JIKWON';

 

 


----- ===== ***** 테이블을 삭제할 때 휴지통에 버리기 ***** ===== ------
    --                 ==> drop 된 테이블을 복구 할 수 있다.

 

    create table tbl_exam_01
   (name  varchar2(20));
   insert into tbl_exam_01(name) values('연습1');
   commit;
   
   create table tbl_exam_02
   (name  varchar2(20));
   insert into tbl_exam_02(name) values('연습2');
   commit;
   
   create table tbl_exam_03
   (name  varchar2(20));
   insert into tbl_exam_03(name) values('연습3');
   commit;
   
   create table tbl_exam_04
   (name  varchar2(20));
   insert into tbl_exam_04(name) values('연습4');
   commit;
   
   create table tbl_exam_05
   (name  varchar2(20));
   insert into tbl_exam_05(name) values('연습5');
   commit;

 

    drop table tbl_exam_01;  --> tbl_exam_01 테이블을 영구히 삭제하는 것이 아니라 휴지통에 버리는 것이다.
    -- Table TBL_EXAM_01이(가) 삭제되었습니다.
    
    select * from tab;
    -- 결과물에서 TNAME 컬럼에 BIN$로 시작하는 것이 휴지통에 버려진 테이블이다.
    
    drop table tbl_exam_02;  --> tbl_exam_01 테이블을 영구히 삭제하는 것이 아니라 휴지통에 버리는 것이다.
    -- Table TBL_EXAM_01이(가) 삭제되었습니다.
    
    select * from tab;
    -- 결과물에서 TNAME 컬럼에 BIN$로 시작하는 것이 휴지통에 버려진 테이블이다.
    
    select * from tbl_exam_01;
    -- ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
    
    select * from tbl_exam_02;
    -- ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
    
    select *
    from "BIN$8wAARGffQ5muLsNjIgknCA==$0";
    
    select * 
    from "BIN$TU3Zt+WTQeGls1HVNcGc5g==$0";

 


----- ===== ***** 휴지통 조회하기 ***** ===== ------

    select *
    from user_recyclebin;

 

 


----- ===== ***** 휴지통에 있던 테이블 복원하기 ***** ===== ------
   

    flashback table TBL_EXAM_01 to before drop;
    -- Flashback을(를) 성공했습니다.
    -- TBL_EXAM_01 은 original_name 컬럼에 나오는 것이다.
    
    select * from TBL_EXAM_01;

 

 


----- ===== ***** 휴지통에 있던 테이블을 영구히 삭제하기 ***** ===== ------

    select *
    from user_recyclebin;
    
    purge table TBL_EXAM_02; 
    -- Table이(가) 비워졌습니다.
    -- TBL_EXAM_02 은 original_name 컬럼에 나오는 것이다.

 


    ----- ===== ***** 휴지통에 있던 모든 테이블을 영구히 삭제하기 ***** ===== ------

    drop table tbl_exam_03; -- Table TBL_EXAM_03이(가) 삭제되었습니다.
    drop table tbl_exam_04; -- Table TBL_EXAM_04이(가) 삭제되었습니다.
    
    select *
    from user_recyclebin;
    
    purge recyclebin;  -- 휴지통에 있던 모든 테이블들을 영구히 삭제하는 것이다.
    -- Recyclebin이(가) 비워졌습니다.
    
    select * from tab;

 

 


----- ===== ***** 테이블 삭제할 때 영구히 삭제하기 ==> 복원 불가 ***** ===== ------\

 

    select *
    from tbl_exam_05;
    
    drop table tbl_exam_05 purge;
    -- Table TBL_EXAM_05이(가) 삭제되었습니다.
    
    drop table tbl_exam_06 purge;
    -- Table TBL_EXAM_06이(가) 삭제되었습니다.
    
    select * from user_recyclebin;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'SQL' 카테고리의 다른 글

SQL*Developer 에서 Plan(실행계획) 확인하기  (0) 2022.07.19
======== **** INDEX(인덱스, 색인) **** ========  (0) 2022.07.19
제약조건  (0) 2022.07.15
NOT NULL 제약  (0) 2022.07.15
Constraint(제약조건) !!!! [개중요] !!!!  (0) 2022.07.14