Oracle_DDL_CREATE / ALTER / DROP

2024. 10. 27. 12:02oracle

/*  중요도 최하 ! 알고만있고 나중에 검색해서 써라

    [ DDL : DATA DEFITION LANGUAGE ]
    
    객체들을 새롭게 생성(CREATE)하고 수정(ALTER)하고 삭제(DROP)하는 구문
    
    DQL : SELECT                    → 질의
    DML : INSERT / UPDATE / DELETE  → 데이터 조작
    DDL : CREATE / ALTER / DROP     → 구조 정의
    
    1. ALTER
    객체 구조를 수정하는 구문
    
    [ 테이블 수정 ] 
    ALTER TABLE 테이블명 수정할내용;
    - 수정할 내용
    1) 컬럼 추가 / 컬럼 수정 / 컬럼 삭제
    2) 제약조건 추가 / 삭제 → 수정은 불가 (삭제 후 다시 추가)
    3) 테이블명 / 컬럼명 / 제약조건명
*/

-- 1) 컬럼 추가 . 수정 / 삭제
SELECT * FROM DEPT_COPY;
-- 1_1) 컬럼추가(ADD): ADD 추가할컬럼명 자료형 DEFAULT 기본값(DEFALUT는 생략 가능)

-- BOSS 컬럼 추가
ALTER TABLE DEPT_COPY ADD BOSS VARCHAR2(20);
-- 새로운 컬럼 추가 시 기본적으로 NULL 값이 채워짐

-- LOCATEION_NAME 칼럼 추가 DEFAULT 값 지정해서
ALTER TABLE DEPT_COPY ADD LOCATION_NAME VARCHAR2(20) DEFAULT '한국';
-- NULL값이 아닌 DEFAULT값으로 채워짐


-- 1_2) 컬럼수정(MPDIFY)
-- 데이터 타입 수정: ALTER TABLE 테이블명 MODIFY 수정할컬럼명 바꾸고자하는데이터타입;
-- DEFAULT 값 수정: ALTER TABLE 테이블명 MODIFY 수정할컬럼명 DEFAULT 바꾸고자하는기본값;

SELECT * FROM DEPT_COPY;

-- DEPT_ID 칼럼 데이터타입을 CHAR(3)로 변경
ALTER TABLE DEPT_COPY MODIFY DEPT_ID CHAR(3);

--ALTER TABLE DEPT_COPY MODIFY DEPT_ID NUMBER;
--ALTER TABLE DEPT_COPY MODIFY DEPT_TITLE VARCHAR2(10);       -- 이미 10바이트 넘는게 있어서 줄일수없음
-- 현재 변경하고자 하는 칼럼에 이미 담겨있는 값과 완전히 다른 타입 OR 작은 크리로는 변경이 불가능하다
-- 문자 → 숫자 (X) / 문자열 사이즈 축소 (X) / 크기를 확대 (O)

-- DEPT_TITLE 컬럼 데이터타입을 VARCHAR2(40)
-- LOCATION_ID컬럼 데이터타입을 VARCHAR2(3)
-- LOCATION_NAME 컬럼 기본값을 '미국'

ALTER TABLE DEPT_COPY
MODIFY DEPT_TITLE VARCHAR2(40)
MODIFY LOCATION_ID VARCHAR2(3)
MODIFY LOCATION_NAME DEFAULT '미국';

CREATE TABLE DEPT_COPY2 AS
SELECT * FROM DEPT_COPY;

-- 1_3) 컬럼삭제(DROP COLUMN): DROP COLUMN 삭제하고픈 컬럼명
SELECT * FROM DEPT_COPY2;

ALTER TABLE DEPT_COPY2 DROP COLUMN DEPT_TITLE;
-- 마지막 칼럼은 삭제할 수 없음!
/*
CREATE TABLE AVB(
); 
*/
--------------------------------------------------------------------------------
-- 2) 제약조건 추가 / 삭제
/*
    2_1) 제약조건 추가
    
    나만의 제약조건명을 만들어서 ADD [CONSTRAINT 제약조건명] 제약조건
    주의사항: 현재 게정이 가지고있는 기존의 제약조건명과 충돌하면 안됨!!!
*/

ALTER TABLE DEPT_COPY
  -- ADD CONSTRANINT DCOPY_UQ UNIQUE(DEPT_TITLE);
MODIFY LOCATION_NAME CONSTRAINT DCOPY_NN NOT NULL;

/*
    2_2) 제약조건 삭제
    
    PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK: DROP CONSTARINT 제약조건명
    NOT NULL: MODIFY 컬럼명 NULL

*/

ALTER TABLE DEPT_COPY DROP CONSTRAINT DCOPY_UQ;

--------------------------------------------------------------------------------
-- 3)컬럼명 / 제약조건명 / 테이블명 변경(RENAME)
-- 3_1) 컬럼명 변경: ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 바꿀컬럼명;
ALTER TABLE DEPT_COPY RENAME COLUMN LOCATEION_NAME TO LNAME;

-- 3_2) 제약조건명 변경: ALTER TABLE 테이블명 RENAME CONSTRAINT 기존제약조건명 TO 바꿀제약조건명;
ALTER TABLE DEPT_COPY RENAME CONSTRAINT DCOPY_NN TO DCOPY_NOT_NULL;
SELECT * FROM DEPT_COPY;

-- 3_3) 테이블명 변경: ALTER TABLE 테이블명 RENAME 기존테이블명 TO 바꿀테이블명;
ALTER TABLE DEPT_COPY RENAME TO DEPT_TEST;

SELECT * FROM DEPT_TEST;



ALTER TABLE DEPT_TEST ADD PRIMARY KEY(DEPT_ID);
CREATE TABLE DEPT_CHILD(
    DEPT_ID CHAR(3) REFERENCES DEPT_TEST(DEPT_ID)
);

INSERT INTO DEPT_CHILD VALUES('D1');
COMMIT;

--------------------------------------------------------------------------------
/*
    2. DROP
    객체를 삭제하는 구문
*/
SELECT * FROM DEPT_TEST;    -- 부모테이블
SELECT * FROM DEPT_CHILD;   -- 자식테이블

DROP TABLE DEPT_TEST;
-- 데이터가 자식 테이블에서 참조되고있음!

-- 1. 자식테이블을 먼저 삭제한 뒤 부모테이블을 삭제
DROP TABLE 자식테이블;
DROP TABLE 부모테이블;

DROP USER 머시기 CASCADE; -- 그냥 다 날려버리기!!! 위험하긴해요~

'oracle' 카테고리의 다른 글

Oracle_TCL_INSERT/ UPDATE/ DELDTE  (1) 2024.10.27
Orcale_DML_INSERT / UPDATE / DELETE  (0) 2024.10.27
Orcale_DDL_CREATE / ALTER/ DROP  (5) 2024.10.23
Oracle_DML_SUB QUERY 서브쿼리  (3) 2024.10.21
Oracle_DML_FUNCTION  (2) 2024.10.20