개발자 미니민의 개발스터디

[Oracle] 오라클 - DDL (컬럼 변경, 추가, 논리적 삭제 ALTER/DROP)

by mini_min
[Oracle]
오라클 - DDL (변경, 추가, 삭제 ALTER/DROP)

✔️ ALTER TABLE ~ ADD

1) 컬럼을 추가하고 싶을 때 사용

✨ 데이터가 존재하는 테이블에 NOT NULL 속성의 컬럼을 추가할 수 없다. 

 

-- 기본형식

ALTER TABLE 테이블명 ADD (컬럼명 자료형(크기));

ALTER TABLE test ADD (dept VARCHAR2(30), sal NUMBER(3) NOT NULL);
💡 컬럼들 사이에 새로운 컬럼을 추가하는 것은 불가하다.

 

 

-- emp 테이블을 이용하여 생년월일을 가상 컬럼으로 추가

ALTER TABLE emp4 ADD ( birth DATE GENERATED ALWAYS AS
		(TO_DATE(SUBSTR(rrn,1,6), 'RRMMDD')) VIRTUAL
         );

 

 

 

✔️ ALTER TABLE ~ MODIFY

1) 컬럼의 타입 또는 폭을 변경할 때 사용

❌ 만약 데이터가 존재하는 경우, 기존에 설정된 폭보다 더 적은 폭은 줄 수 없다. 

 

-- 기본형식

ALTER TABLE 테이블명 MODIFY (컬럼명 자료형(크기));
SELECT * FROM emp2;
          ALTER TABLE emp2 MODIFY (name VARCHAR2(8) ); --에러

 

 

 

✔️ALTER TABLE ~ RENAME COLUMN

1) 컬럼의 이름 변경할 때 사용

 

-- 기본형식

ALTER TABLE 테이블명 RENAME COLUMN 컬럼명 TO 새로운컬럼명

ALTER TABLE test RENAME COLUMN num TO empNo;

 

 

 

✔️ALTER TABLE ~ DROP COLUMN

1) 컬럼 삭제. 데이터가 있으면 데이터도 그냥 삭제해버린다.

 

-- 기본형식

ALTER TABLE 테이블명 DROP COLUMN 컬럼명

ALTER TABLE test DROP COLUMN dept;

 

 

 

✔️ALTER TABLE ~ SET UNUSED

1) 컬럼을 논리적으로 삭제

논리적 삭제 : 물리적인 삭제가 아니라, 논리적으로 사용을 못하도록 막는 것이다.

 

-- 예시

 --pay 컬럼 논리적으로 삭제
        ALTER TABLE emp1 SET UNUSED (pay);
        DESC emp1;  
        -- pay 컬럼 안보임
        
        SELECT * FROM emp1;
            --pay 안보임

 

 

✨ ALTER TABLE ~ SET UNUSED에 의해 논리적으로 삭제된 컬럼의 정보 확인

 -- UNUSED에 의해 삭제된 컬럼 확인  불가!!
	SELECT * FROM col WHERE tname = 'EMP1'; 	--이걸로 확인불가
	SELECT * FROM cols WHERE table_name = 'EMP1'; 	--이걸로 확인불가

     -- 삭제된 컬럼의 갯수는 확인 가능하다.
	SELECT * FROM user_unused_col_tabs;
💡 이런... unused 로 논리적 삭제 당한 컬럼의 정보는 쉽게 확인 불가

논리적으로 삭제된 컬럼을 실제로 삭제해볼까?

 

 

✨ ALTER TABLE ~ DROP UNUSED COLUMNS

ALTER TABLE emp1 DROP UNUSED COLUMNS;

SELECT * FROM user_unused_col_tabs;    --안뜨는거 확인

 

 

 

✔️테이블 삭제 

-- 기본형식

 DROP TABLE 테이블;  -- 휴지통에 임시보관
 DROP TABLE 테이블 PURGE;  -- 휴지통에 임시보관 하지 않고 바로 삭제
 DROP TABLE 테이블명 CASCADE CONSTRAINTS PURGE;
         -- 테이블과 그 테이블을 참조하는 FOREIGN KEY의 제약조건을 동시에 삭제
💡 PURGE : 휴지통 안거치고 영구 삭제
CASCADE CONSTRAINTS : 테이블 뿐만 아니라 참조하던 제약조건도 동시에 삭제한다.

 

 

-- 휴지통 확인

--RECYCLEBIN

SHOW RECYCLEBIN;
    SELECT * FROM RECYCLEBIN;
💡 휴지통에서 복원하는 방법
FLASHBACK TABLE test TO BEFORE DROP;

💡 테이블 삭제 또는 휴지통 비우기
PURGE TABLE 테이블명;
PURGE RECYCLEBIN;

 

 

 

✔️TRUNCATE 

DROP 이 테이블 자체를 삭제하는거라면, TRUNCATE 는 테이블의 모든 레코드 값을 삭제한다.

❌ 실행시 자동 커밋되어, 복원불가. 

 

-- 기본형식

TRUNCATE TABLE emp1;		--모든 내용 지워짐
SELECT * FROM emp1;

 

 

 

✔️객체 이름 변경

-- 기본형식

RENAME 옛이름 TO 새이름;

RENAME emp2 TO demo;

 

 

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기