✍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;
반응형
'Backend > Oracle' 카테고리의 다른 글
[DB] VIEW, SEQUENCE, INDEX (0) | 2021.09.29 |
---|---|
[DB] DCL :: 권한, 사용자 계정 생성하는 법 (0) | 2021.09.28 |
[DB] TCL(TRANSGACTION CONTROL LANGUAGE) (0) | 2021.09.27 |
[DB] DDL : CREATE, 제약조건 CHECK (0) | 2021.09.27 |
[DB] DML (INSERT, UPDATE, MERGE, DELETE) (0) | 2021.09.25 |