[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;
'SQL쿼리' 카테고리의 다른 글
[Oracle] 오라클 - DML (데이터 수정, 삭제 UPDATE/DELETE/MERGE) (0) | 2022.08.10 |
---|---|
[Oracle] 오라클 - DML ( 데이터 추가 INSERT/서브쿼리/다중행 추가) (0) | 2022.08.10 |
[Oracle] 오라클 - DDL (테이블 생성 CREATE/가상컬럼/서브쿼리) (0) | 2022.08.10 |
[Oracle] 오라클 - 분석 함수 나머지 (LISTAGG () WITHIN GROUP() / NTILE() OVER() 등) (0) | 2022.08.10 |
[Oracle] 오라클 - AVG() OVER() / MAX() 와 MIN() / RATIO_TO_REPORT() (0) | 2022.08.09 |
블로그의 정보
개발자 미니민의 개발로그
mini_min