▶ ALTER
- 객체 구조를 수정해 주는 구문
<테이블 수정>
[표현법]
ALTER 객체명(TABLE, INDEX, USER, ...) 테이블명 수정할내용;
- 수정할 내용
1) 컬럼 추가/수정/삭제
2) 제약조건 추가/삭제 => 수정은 안된다.(수정하고자 한다면 삭제 후 새롭게 추가해야 한다.)
3) 테이블명/컬럼명/제약조건명 수정가능하다.
■ 컬럼 추가 / 수정 / 삭제
● 컬럼 추가(ADD)
[표현법]
ADD 추가할컬럼명 자료형 [DEFAULT 기본값]
ex)
-- CNAME 컬럼 추가하기
ALTER TABLE DEPT_COPY ADD CNAME VARCHAR2(20);
-- 새로운 컬럼이 추가되고 NULL값으로 채워졌다.
-- LNAME 컬럼 추가하기 DEFAULT값으로 '한국' 이라고 지정하기
ALTER TABLE DEPT_COPY ADD LNAME VARCHAR2(20) DEFAULT '한국';
● 컬럼 수정(MODIFY)
[표현법]
컬럼의 자료형 수정 : MODIFY 수정할 컬럼명 바꾸고자하는 자료형
DEFAULT값 수정시 : MODIFY 수정할 컬럼명 DEFAULT 바꾸고자하는 기본값
- 문자 => 숫자(X) / 사이즈 축소(X) / 사이즈 확대(O)
- 한 번에 여러 개의 컬럼 변경이 가능하다.
ex)
-- DEPT_COPY테이블의 DEPT_ID의 자료형을 CHAR(3)로 변경
ALTER TABLE DEPT_COPY MODIFY DEPT_ID CHAR(3);
-- 현재 변경하고자하는 컬럼에 이미 담겨있는 값과 완전히 다른 타입으로 변경해보기(불가능)
ALTER TABLE DEPT_COPY MODIFY DEPT_ID NUMBER;
-- column to be modified must be empty to change datatype
-- 현재 변경하고자하는 컬럼에 이미 담겨있는 값보다 더 작은 크기로 변경해보기(불가능)
ALTER TABLE DEPT_COPY MODIFY DEPT_ID CHAR(1);
-- cannot decrease column length because some value is too big
-- DEPT_TITLE 컬럼의 데이터 타입을 VARCHAR2(40)로 변경
-- LOCATION_ID 컬럼의 데이터타입을 VARCHAR2(2)로
-- LNAME 컬럼의 기본값을 '미국'으로 변경
ALTER TABLE DEPT_COPY
MODIFY DEPT_TITLE VARCHAR2(40)
MODIFY LOCATION_ID VARCHAR(2)
MODIFY LNAME DEFAULT '미국';
● 컬럼 삭제(DROP COLUMN)
[표현법]
DROP COLUMN 삭제하고자하는 컬럼명
ex)
-- DEPT_COPY2 테이블에 DEPT_ID 컬럼 지우기
ALTER TABLE DEPT_COPY2 DROP COLUMN DEPT_ID;
-- 모든 컬럼 지워보기
ALTER TABLE DEPT_COPY2 DROP COLUMN DEPT_TITLE;
ALTER TABLE DEPT_COPY2 DROP COLUMN LOCATION_ID;
ALTER TABLE DEPT_COPY2 DROP COLUMN CNAME;
ALTER TABLE DEPT_COPY2 DROP COLUMN LNAME;
-- cannot drop all columns in a table
-- 마지막 컬럼은 삭제할 수 없다.
※ 모든 DDL문 전체는 ROLLBACK으로 복구가 안된다.
■ 제약조건 추가 / 삭제
● 제약조건 추가
[표현법]
PRIMARY KEY : ADD PRIMARY KEY(컬럼명);
FOREIGN KEY : ADD FOREIGN KEY(컬럼명) REFERENCES 참조할테이블명[(참조할컬럼명)]
UNIQUE : ADD UNIQUE(컬럼명);
CHECK : ADD CHECK(컬럼에 대한 조건);
NOT NULL : MODIFY 컬럼명 NOT NULL
- 나만의 제약조건명을 부여하고자 한다면 CONSTRAINT 제약조건명 앞에다 붙이면 된다.
ex)
-- DEPT_COPY 테이블로부터
-- DEPT_ID 컬럼에 PRIMARY KEY 제약조건 추가
-- DEPT_TITLE 컬럼에 UNIQUE 제약조건 추가
-- LNAME 컬럼에 NOT NULL 제약조건 추가
ALTER TABLE DEPT_COPY
ADD CONSTRAINT DCOPY_PK PRIMARY KEY(DEPT_ID)
ADD CONSTRAINT DCOPY_UQ UNIQUE(DEPT_TITLE)
MODIFY LNAME CONSTRAINT DCOPY_NN NOT NULL;
● 제약조건 삭제
[표현법]
PRIMARY KET, FOREIGN KEY, UNIQUE, CHECK : DROP CONSTRAINT 제약조건명
NOT NULL : MODIFY 컬럼명 NULL;
■ 컬럼명 / 제약조건명 / 테이블명 변경(RENAME)
● 컬럼명 변경
[표현법]
RENAME COLUMN 기존컬럼명 TO 바꿀컬럼명
ex)
-- DEPT_COPY 테이블에서 DEPT_TITLE을 DEPT_NAME으로 바꾸기
ALTER TABLE DEPT_COPY RENAME COLUMN DEPT_TITLE TO DEPT_NAME;
● 제약조건명 변경
[표현법]
RENAME CONSTRAINT 기존제약조건명 TO 바꿀제약조건명
ex)
-- DEPT_COPY 테이블에서 SYS_C007141을 DCOPY_DID_NN로 바꾸기
ALTER TABLE DEPT_COPY RENAME CONSTRAINT SYS_C007141 TO DCOPY_DID_NN;
● 테이블명 변경
[표현법]
RENAME [기존테이블명] TO 바꿀테이블명
ex)
-- DEPT_COPY 테이블 이름을 DEPT_TEST로 변경
ALTER TABLE DEPT_COPY RENAME /*DEPT_COPY*/ TO DEPT_TEST; -- 기존 테이블 이름이 이미 나왔으므로 생략이 가능하다.
▶ DROP
- 객체를 삭제하는 구문
[표현법]
DROP TABLE 삭제하고자하는 테이블이름
● 부모테이블 삭제
- 어디선가 참조되고 있는 부모테이블들은 삭제되지 않는다.
방법 1. 자식테이블을 먼저 삭제한 후 부모테이블을 삭제한다면 된다.
방법 2. 부모테이블만 삭제하되, 맞물려있는 외래키 제약조건도 함께 삭제하는 방법
'DB' 카테고리의 다른 글
DB (10) TCL(COMMIT, ROLLBACK, SAVEPOINT) (0) | 2023.06.13 |
---|---|
DB (9) DCL(GRANT, REVOKE) (0) | 2023.06.13 |
DB (7) DML(INSERT, UPDATE, DELETE) (0) | 2023.06.10 |
DB (6) DDL(CREATE) (0) | 2023.06.08 |
DB (5) DML(SELECT) SUBQUERY (0) | 2023.06.05 |