테이블 수정 > 테이블 정의 수정 > 스키마 수정 > 컬럼 수정 > 컬럼명 or 자료형(길이) or 제약사항 등...
📌 되도록 테이블을 수정하는 상황을 발생시키면 안된다!!
1. 테이블 삭제(drop) > 테이블 DDL(create) 수정 > 수정된 DDL로 다시 테이블 생성
a. 기존 테이블에 데이터가 없었을 경우 > 아무 문제가 없음
b. 기존 테이블에 데이터가 있었을 경우 > 미리 데이터 백업 > 테이블 삭제 > 수정된 테이블 생성 > 데이터 복구
2. alter 명령어 사용 > 기존 테이블의 구조 변경
a. 기존 테이블에 데이터가 없었을 경우 > 아무 문제 없음
b. 기존 테이블에 데이터가 있었을 경우 > 상황에 따라 비용 차이 발생
💡 기본 테이블
create table tblEdit (
seq number primary key,
data varchar2(20) not null
);
insert into tblEdit values(1, '마우스');
insert into tblEdit values(2, '키보드');
insert into tblEdit values(3, '모니터');
select * from tblEdit;
📌 Case 1. 새로운 컬럼을 추가하기
alter table tblEdit
add (price number);
alter table tblEdit
add(qty number not null);
delete from tblEdit;
insert into tblEdit values(1, '마우스', 1000, 1);
insert into tblEdit values(2, '키보드', 2000, 1);
insert into tblEdit values(3, '모니터', 3000, 2);
select * from tblEdit;
-- null이 안되는 컬럼을 추가하는 방법 2
alter table tblEdit
add (color varchar2(30) default 'white' not null);
📌 Case 2. 컬럼을 삭제하기 > 복구 안됨
: insert, delete, update > 복구가능 (DML)
: 나머지는 복구 어렵다고 생각하기
alter table tblEdit
drop column qty;
alter table tblEdit
drop column seq; --PK 삭제!! > 절대 금지 !!!
select * from tblEdit;
📌 Case 3. 컬럼을 수정하기
-- SQL 오류: ORA-12899: "HR"."TBLEDIT"."DATA" 열에 대한 값이 너무 큼(실제: 31, 최대값: 20)
insert into tblEdit values(4, '맥북 M2 프로 2023 고급형');
alter table tblEdit
modify (컬럼정의);
alter table tblEdit
modify (data varchar2(100)); --확장
alter table tblEdit
modify (data varchar2(100) null); -- not null > null
alter table tblEdit
modify (data varchar2(100) not null); -- null > not null
-- ORA-01439: 데이터 유형을 변경할 열은 비어 있어야 합니다
alter table tblEdit
modify (data number);
delete from tblEdit;
📌 Case 4. 제약 사항 조작
(ddl.sql 제약사항 만들기 3번째 내용)
drop table tblEdit;
create table tblEdit (
seq number,
data varchar2(20)
);
alter table tblEdit
add constraint tbledit_seq_pk primary key(seq);
alter table tblEdit
add constraint tbledit_data_uq unique(data);
insert into tblEdit values(1, '강아지');
insert into tblEdit values(2, '고양이');
--ORA-00001: 무결성 제약 조건(HR.TBLEDIT_DATA_UQ)에 위배됩니다
insert into tblEdit values(3, '고양이');
ORA-00001: 무결성 제약 조건(HR.TBLEDIT_SEQ_PK)에 위배됩니다
insert into tblEdit values(3, '호랑이');