ORACLE SQL

ORACLE SQL DDL_02

최종군 2024. 7. 28. 21:41

 

ALTER TABLE : 

테이블에 변경사항을 적용하고자 할 때 사용된다 

 

 

UNIQUE : ALTER TABLE 테이블명 ADD UNIQUE(컬럼명);

CHECK : ALTER TABLE 테이블명 ADD CHECK(컬럼에 대한 조건식);

PRIMARY KEY : ALTER TABLE 테이블명 ADD PRIMARY KEY(컬럼명);

FOREIGN KEY : ALTER TABLE 테이블명 ADD FOREIGN KEY(컬럼명) REFERNECES 참조할 테이블명[참조할 컬럼명]

 

 

DEFAULT 옵션 : ALTER TABLE 테이블명 MODIFY 컬럼명 DEFAULT 기본값

 

ALTER :객체를 변경하는 구문 

* 변경되는 내용 

-제약조건 추가/수정(삭제 -> 추가)/ 삭제

-컬럼명/데이터 타입/제약조건명/테이블명 변경 

 

   * 컬럼 추가/수정/삭제 

 ALTER TABLE 테이블명 ADD 컬럼명 자료형 [기본값|제약조건] 

 

ALTER TABLE DEPT_TABLE  ADD CNAME VARCHAR2(20);

   ALTER TABLE   테이블명       ADD   컬럼명       자료형           

 

 

컬럼 수정(MODIFY)  :

 

 - 데이터 타입 수정 : ALTER TABLE 테이블명 MODIFY 컬럼명 변경할 데이터 타입

     

 1) ALTER TABLE DEPT_TABLE MODIFY DEPT_ID CHAR(5);

  

 

 

 

 - 기본값 수정 : ALTER TABLE 테이블명 MODIFY 컬럼명 DEFAULT 변경할 기본값

 

 

ALTER TABLE DEPT_TABLE MODIFY DEPT_ID NUMBER; 
기존에는 문자타입에서  변경하고자 하는 값이  숫자타입일 경우 

형식 오류가 발생된다.

 

 

 

ALTER TABLE DEPT_TABLE MODIFY DEPT_TITLE VARCHAR2(10);
일부 값이 너무 커서 열 길이를 줄일 수 없다 

크기 오류가 발생한다. 

 

ALTER TABLE DEPT_TABLE MODIFY DEPT_TITLE VARCHAR2(40);

35바이트에서 50바이트로 변경이 가능하다. 

 

-- 여러 개의 컬럼도 변경이 가능하다. 

ALTER TABLE DEPT_TABLE 
MODIFY DEPT_TITLE VARCHAR2(55)
MODIFY LNAME DEFAULT '코리아';

 

DROP COLUMN : 컬럼 삭제 

 

 

-- 테이블 복사 

CREATE TABLE DEPT_COPY
AS SELECT * FROM DEPT_TABLE;

 

 

 

 

 

SELECT * FROM DEPT_COPY;

ALTER TABLE DEPT_COPY DROP COLUMN LNAME;
ALTER TABLE DEPT_COPY DROP COLUMN CNAME;
ALTER TABLE DEPT_COPY DROP COLUMN LOCATION_ID;
ALTER TABLE DEPT_COPY DROP COLUMN DEPT_TITLE;
ALTER TABLE DEPT_COPY DROP COLUMN DEPT_ID; -- 오류 발생! 
-- 테이블에 최소한의 한개의 컬럼은 존재해야 한다. 

 

 

제약 조건 추가/삭제 (수정 : 삭제 -> 추가)

 

* 기본키 (PRIMARY KET) : ALTER TABLE 테이블명 ADD PRIMARY KEY(컬럼명)

* 외래키(FOREIGN KEY) : ALTER TABLE 테이블명 ADD FOREUGN KEY (컬럼명) REFERENCES 참조할 테이블명 ()

생략 시 테이블에 있는 기본 키 


* UNIQUE : (중복을 허용하지 않는 제약조건) : ALTER TABLE 테이블명 ADD UNIQUE(컬럼명)

 

* CHECK (특정 값들만 저장하고자 할때 사용하는 제약조건, NULL값 가능)

: ALTER TABLE 테이블명 ADD CHECK (컬럼에대한 조건식

 

* NOT NULL (NULL값을 허용하지 않는 제약조건) : ALTER TABLE 테이블명 MODIFY 컬럼명 NOT NULL

 

 

 

제약 조건 삭제 : 

ALTER TABLE DROP 테이블명 DROP CONSTRAINT 제약조건명 / NOT NULL 은 예외 

ALTER TABLE 테이블명 MODIFY 컬럼명 NULL

 

ALTER TABLE DEPT_TABLE 
ADD CONSTRAINT DT_PK PRIMARY KEY(DEPT_ID)
ADD CONSTRAINT DT_UQ UNIQUE(DEPT_TITLE)
MODIFY LNAME NOT NULL;

 

ALTER TABLE DEPT_TABLE DROP CONSTRAINT DT_PK;

ALTER TABLE DEPT_TABLE 
DROP CONSTRAINT DT_UQ
MODIFY LNAME NULL;

 

 

DROP TABLE DEPT_TABLE;

참조되고 있는 부모테이블은 삭제가 되지 않는다. 

지우고자 할 경우 1) 자식테이블을 먼저 삭제 후 부모테이블을 삭제 

                            2) 부모테이블만 삭제하는데, 제약조건까지 삭제 

                                          DROP TABLE 테이블명 CASCADE CONSTRAUNT  

 

 

1) 컬럼명 변경 : RENAME COLUMN 기존 컬럼명 TO 바꿀 컬럼명 : 

ALTER TABLE DEPT_TABLE RENAME COLUMN DEPT_TITLE TO DEPT_NAME;

 

-- DEPT_TITLE --> DEPT_NAME으로 변경 

1) ALTER TABLE

2) 테이블명 

2) RENAME COLUMN

2) 기존 컬럼명 

3) TO

4) 바꿀 컬럼명 

 

 

2) 제약조건명 변경 : RENAME CONSTRAINT 기존제약조건명 TO 바굴제약조건명

ALTER TABLE DEPT_TABLE RENAME CONSTRAINT SYS_C008501 TO DT_DEPTID_NN;

 

3) 테이블명 변경 : RENAME TO 바꿀 테이블명 
ALTER TABLE DEPT_TABLE RENAME TO DEPT_END;

 

 

 

TRUNCATE : 테이블 초기화 

- > DROP과는 다르게 테이블의 데이터만을 전부 삭제하여 테이블의 초기상태로 돌려주는 것 

 

 

TRUNCATE TABLE DEPT_END;

 

 

 

 

      

'ORACLE SQL' 카테고리의 다른 글

ORACLE SQL SEQUENCE  (0) 2024.07.29
ORACLE PL/SQL  (0) 2024.07.29
ORACLE SQL DDL_01  (0) 2024.07.27
SQL 1회독  (0) 2024.07.26
ORACLE SQL 2회독 문제 풀이  (0) 2024.07.25