Backend/Oracle

[DB] DDL :: ALTER , DROP

Deeb 2021. 9. 28. 17:33

✍ALTER

:  객체를 수정하는 구문

 

표현식

테이블 객체 수정 
ALTER TABLE 테이블명 수정할 내용;

👉수정할 내용

  • 컬럼 추가/수정/삭제, 제약조건 추가/삭제
  • 컬럼 자료형 변경, DEFAULT값 변경
  • 테이블명 변경, 컬럼명, 제약조건 이름 변경

🚩 1. 컬럼 추가, 수정, 삭제


1)  컬럼 추가(ADD)

ALTER TABLE 테이블명
ADD (새로운컬럼명 데이터타입(크기))

➡ ADD 뒤에 COLUMN 생략가능

➡ 새로운 컬럼이 추가되었지만 데이터는 없기 때문에  값이 NULL이다. 

1-1)  컬럼 추가 시 DEFAULT값 지정

ALTER TABLE 테이블명
ADD (새로운컬럼명 데이터타입(크기) DEFAULT 기본값)

2) 컬럼 수정(MODIFY)

데이터 타입, 기본값(DEFAULT) 수정
ALTER TABLE 테이블명
MODIFY 컬럼명 데이터타입(크기)

특징

  • 컬럼의 크기를 줄일 경우에는 기록된 값이 변경하려는 크기를 초과하는 값이 없을 때에만 변경할 수 있다.

2-1) 컬럼 DEFAULT 값 변경하기 

데이터 타입, 기본값(DEFAULT) 수정
ALTER TABLE 테이블명
MODIFY 컬럼명 DEFAULT 기본값;

 

2-2) 여러 컬럼 한 번에 수정하기

데이터 타입, 기본값(DEFAULT) 수정
ALTER TABLE 테이블명
MODIFY 컬럼명 데이터타입(크기)
MODIFY 컬럼명 DEFAULT 기본값;

➡ 구분하는 , (콤마)기호가 없다!


3) 컬럼 삭제

데이터가 기록 되어 있어도 삭제 가능
삭제된 컬럼은 복구 안됨

특징

  • 테이블에는 최소 한 개의 컬럼이 존재해야 한다 : 모든 컬럼 삭제 불가
  • DROP은 DDL이기 때문에 COMMIT, ROLLBACK불가
ALTER TABLE 테이블명
DROP COLUMN 삭제할 컬럼명

 

3-1) 제약조건이 설정되어있는 컬럼 삭제 시 주의 사항과 삭제 방법

컬럼 삭제 시 참조하고 있는 컬럼이 있다면 컬럼 삭제 불가능
ALTER TABLE 테이블명
DROP [COLUMN] PRIMARYKEY이름;
 ORA-12992: cannot drop parent key column

4) CASCADE CONSTRAINTS 옵션

FK 제약조건을 무시하고 컬럼을 삭제하는 옵션 
ALTER 테이블명
DROP COLUMN PRIMARYKEY이름 CASCADE CONSTRAINTS;

🚩2. 제약 조건 추가, 삭제

  • 제약 조건 추가 : ADD CONSTRAINT 제약조건명 제약조건(컬럼명)
  • 제약 조건 삭제 : DROP CONSTRAINT 제약조건명
  • 추가 . 제약 조건을 수정하는 구문이 없다. 

 

1)  제약 조건 추가 

-- PK 제약 조건 추가
ALTER TABLE DEPT_COPY
ADD PRIMARY KEY(DEPT_ID);   -- 제약조건명이 무작위로 지정됨

-- UNIQUE 제약조건 추가
ALTER TABLE DEPT_COPY
ADD CONSTRAINT DEPT_COPY_U UNIQUE(DEPT_TITLE); -- 제약조건명 지정

-- CHECK 제약 조건 추가
ALTER TABLE DEPT_COPY
ADD CONSTRAINT LNAME_CHECK CHECK(LNAME IN('한국', '미국', '중국') );

-- NOT NULL 제약조건 추가 (잘 구분해서 알아둘 것)
ALTER TABLE DEPT_COPY
--ADD DEPT_TITLE NOT NULL; --> 컬럼 추가 구문으로 인식된다. NOT NUL은 ADD로 추가하지 않는다.
-- ORA-02263: need to specify the datatype for this column

MODIFY DEPT_TITLE NOT NULL; -- ADD대신 MODIFY 사용
--> NULL 저장 가능 여부를 변경하는 것이다.

 

2)  제약 조건 삭제

ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명;

- NOT NULL 제약조건 삭제
ALTER TABLE  테이블명
DROP CONSTRAINT SYS_C007145; 

-> 제약조건명 

- NOT NULL 제약조건 삭제방법2
ALTER TABLE 테이블명
MODIFY 컬럼명 CONSTRAINT SYS_C007147 NULL;

--> DEPT_TITLE 컬럼에 지정된 제약조건 SYS_C007147(NOT NULL)을  NULL 허용으로 변경
-- NOT NULL 제약조건 추가, 제거 방법만 독특하다

🚩 컬럼, 제약조건, 테이블 이름 변경 

1)  컬럼 이름 변경

ALTER TABLE 테이블명
RENAME COLUMN 컬럼명 TO 변경명;

2)  제약조건 이름 변경

ALTER TABLE 테이블명
RENAME CONSTRAINT 제약조건명 TO 변경명;

3) 테이블명 변경(RENAME [테이블명] TO 변경명)

ALTER TABLE 테이블명
RENAME [테이블명] TO 변경명;

🚩 테이블 삭제

DROP TABLE 테이블명 [CASCADE CONSTRAINTS];

 

1)  참조 관계에서 부모테이블 삭제 시 발생하는 문제 및 해결방법 

예제. 두 개의 테이블 생성, 참조관계 설정
CREATE TABLE TB1(
    TB1_PK NUMBER PRIMARY KEY,
    TB1_COL NUMBER
);

CREATE TABLE TB2(
    TB2_PK NUMBER PRIMARY KEY,
    TB2_COL NUMBER REFERENCES TB1
);

➡  TB2 : 자식테이블 /  TB1 : 부모 테이블

 

2)  삭제 방법 1 : 자식 -> 부모 테이블 순서로 삭제하기

DROP TABLE TB2;
DROP TABLE TB1;

 

3) 삭제 방법 2 : CASCADE CONSTRAINTS; 

DROP TABLE TB1 CASCADE CONSTRAINTS;
DROP TABLE TB2;
반응형