고래씌
[Oracle] 8-1. DDL(ALTER, DROP) ① - ALTER 본문
1. DDL (Data Definition Language)
: 객체들을 새롭게 생성(CREATE)하고, 수정, 삭제하는 구문
2. ALTER
: 객체 구조를 수정하는 구문
[표현법]
ALTER TABLE 테이블명 수정할 내용; |
▶ 수정할 내용
1) 컬럼 추가 / 수정 / 삭제
2) 제약조건 추가 / 삭제 => 수정은 불가
3) 테이블명 / 컬럼명 / 제약조건명 수정
1) 컬럼추가 / 수정 /삭제
1-1) 컬럼추가 (ADD)
: ADD 추가할 컬럼명 자료형 [DEFAULT 기본값] [] 생략가능
▶ DEPT_COPY 테이블에 CNAME 칼럼 추가
ALTER TABLE DEPT_COPY ADD CNAME VARCHAR2(20); |
☞ 새로운 칼럼이 만들어지고 NULL값으로 채워짐
▶ DEPT_COPY 테이블에 LNAME 컬럼 추가 DEFAULT 설정
ALTER TABLE DEPT_COPY ADD LNAME VARCHAR2(20) DEFAULT '한국'; |
☞ 새로운 칼럼이 만들어지고 NULL 값이 아닌 DEFALUT 값으로 채워짐
1_2) 칼럼 수정 (MODIFY)
- 칼럼의 자료형 수정 : MODIFY 수정할 컬럼명 바꾸고자하는 자료형
- DEFAULT 값 수정 : MODIFY 수정할 컬럼명 DEFAULT 바꾸고자하는 기본값
▶ DEPT_COPY 테이블의 DEPT_ID 컬럼이 자료형을 CHAR(3)으로 변경
ALTER TABLE DEPT_COPY MODIFY DEPT_ID CHAR(3); |
☞ 정상적으로 자료형 변경됨
☞ 하지만... CHAR(2)로 변경하게 된다면..?
☞ 에러발생. 현재 변경하고자하는 칼럼에 이미 담겨있는 값보다 더 작은 크기로 변경이 불가하다.
☞ 에러발생. 현재 변경하고자하는 칼럼에 이미 담겨있는 값과 완전히 다른 타입으로 변경이 불가하다.
=> 문자 → 숫자 X / 값이 담겨있다면 문자열 사이즈 축소 X / 사이즈 확대 (O)
▶ 한번에 여러개의 컬럼 변경
DEPT_TITLE 컬럼의 데이터타입을 VARCHAR2(40)으로
LOCATION_ID 컬럼의 데이터타입을 VARCHAR2(2)로
LNAME의 기본값을 미국으로 바꾸기
1_3) 컬럼 삭제 (DROP COLUMN)
: DROP COLUMN 삭제하고자하는 칼럼명
▶ DEPT_COPY2 테이블 생성후 DEPT_COPY2로부터 DEPT_ID 칼럼 지우기
☞ DEPT_ID 칼럼이 삭제된 것 확인
☞ 이때, ROLLBACK을 이용하여 복구가 불가능하다. ROLLBACK은 DDL구문은 복구가 불가능하다.
▶ 모든 칼럼을 지워보기
☞ 위에 3개는 삭제가 정상적으로 되지만, 마지막행 LNAME은 오류가 발생한다.
☞ 테이블에는 최소 한개의 컬럼은 존재해야하기 때문에 마지막 컬럼은 삭제할 수 없다.
2) 제약조건 추가 / 삭제
2_1) 제약조건 추가
▶ 제약조건(PRIMARY KEY, FOREGIN KEY, UNIQUE, CHECK, NOT NULL)
ADD 제약조건(컬럼명) [REFERENCES 참조할 테이블명(참조할 컬럼명)]
☞ NOT NULL 제약조건 같은 경우 MODIFY 컬럼명 NOT NULL;
☞ 제약조건의 이름을 부여하고자 한다면 CONSTRAINT 제약조건명을 추가
▶ DEPT_COPY 테이블로부터 DEPT_ID에는 PRIMARY KEY, DPET_TITLE UNIQUE, LNAME NOT NULL 제약조건 부여
2_2) 제약조건 삭제
PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK
DROP CONSTRAINT [제약조건명];
NOT NULL : MODIFY 컬럼명 NULL;
▶ DEPT_COPY 테이블로부터 DCOPY_PK 제약조건 삭제
▶ DCOPY_UQ, DCOPY_NN 제약조건 삭제
3) 컬럼명 / 제약조건명 / 테이블명 변경 (RENAME)
3_1) 컬럼명 변경
: RENAME COLUMN 기존컬럼명 TO 바꿀컬럼명;
▶ DEPT_COPY 테이블에서 DEPT_TITLE 컬럼을 DEPT_NAME으로 바꾸기
☞ DEPT_NAME으로 변경됨
3_2) 제약조건명 변경
: RENAME CONSTRAINT 기존제약조건명 TO 바꿀제약조건명
▶ DEPARTMENT의 SYS_C006998을 DCOPY_NN 으로 변경
☞ 제약조건명이 DCOPY_NN으로 변경됨
3_3) 테이블명 변경
: RENAME [기존테이블명] TO 바꿀테이블명
☞ 테이블명 변경됨
'Database > Oracle' 카테고리의 다른 글
[Oracle] 9. DCL(GRANT, REVOKE) (0) | 2023.11.30 |
---|---|
[Oracle] 8-2. DDL(ALTER, DROP) ② - DROP (0) | 2023.11.30 |
[Oracle] DML 실습문제 (CREATE, INSERT, UPDATE, DELETE) (0) | 2023.11.29 |
[Oracle] 7-3. DML(INSERT, UPDATE, DELETE) - DELETE, TRUNCATE (2) | 2023.11.29 |
[Oracle] 7-2. DML(INSERT, UPDATE, DELETE) - UPDATE (0) | 2023.11.29 |