데이터베이스

DATABASE STEP 24 - ALTER

IT의 큰손 2023. 3. 22. 17:37
728x90

★ DDL > Object

  • 객체 생성 : create
  • 객체 삭제 : drop
  • 객체 수정 : alter

★ 테이블 수정하기

  • 테이블 정의 수정 > 컬럼 수정 > 컬럼명 or 자료형(길이) or 제약사항
  • 테이블 수정해야 하는 상황 발생!!
    • 1. 테이블 삭제(drop) > 테이블 DDL(Create) 수정 > 수정된 DDL로 새롭게 테이블 생성
              a. 기존 테이블 데이터가 없었을 경우 > 아무 문제 없음
              b. 기존 테이블 데이터가 있었을 경우 > 미리 데이터 백업 > 테이블 삭제 > 수정 후 생성 > 데이터 복구 
                  - 공부할 때 자주 사용
                  - 개발 중에 사용 
                  - 서비스 운영 중 > 불가능 !!
    • 2. alter 명령어 사용 > 기존 테이블 구조(컬럼 정의) 변경
              a. 기존 테이블 데이터가 없었을 경우 > 아무 문제 없음
              b. 기존 테이블 데이터가 있었을 경우 > 경우에 따라 다름
                  - 공부할 때 사용
                  - 개발 중에 사용
                  - 서비스 운영 중 > 이 방식을 사용 > 운영 중에도 이 방식을 사용 금지
    • 사용 양식
alter table [테이블명] [선택기능] [선택컬럼]

 

■ 사용 ex)

  • ex1) 삭제 후, 다시 생성
drop table tblEdit;

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, '모니터');
  • ex2) 새로운 컬럼을 추가
  • 테이블에 데이터가 삽입되어 있는 상태라면 > not null로 제약사항을 설정하면 에러발생!!
-- ORA-01758: table must be empty to add mandatory (NOT NULL) column
-- 테이블이 비어있는 상태가 아니라서 not null 에러 발생
alter table tblEdit 
    add (price number not null);

-- 해결 방법 1 : null로 추가한다.
alter table tblEdit 
    add (price number null);

-- 해결 방법 2 : default 값을 추가한다.
alter table tblEdit
	add (price number default 0 not null);

-- 해결 방법 3 : 데이터를 모두 제거 후, 삽입 
delete from tblEdit;

alter table tblEdit
    add (memo varchar2(100) not null);
    
insert into tblEdit values (1, '마우스', 10000, '로지텍');
insert into tblEdit values (2, '키보드', 20000, 'MS');
insert into tblEdit values (3, '모니터', 30000, 'Dell');
  • ex3) 컬럼 삭제하기
alter table tblEdit
    drop column memo;

alter table tblEdit
    drop column seq;  -- PK 컬럼 삭제 > 절대 금지!!!
  • ex4) 컬럼 수정하기
-- 3.1 컬럼의 길이 수정하기(확장/축소)
alter table tblEdit
    modify (data varchar2(100)); -- not null 은 그대로 유지

desc tblEdit;

-- 3.2 컬럼의 제약 사항 수정하기
alter table tblEdit
    modify (data varchar2(100) null);
    
-- 3.3 컬럼의 자료형 바꾸기
-- 마찬가지로, 안에 데이터들이 비어있는 상태여야 가능하다.
alter table tblEdit
    modify (data number);

alter table tblEdit
    modify (seq varchar2(30));
728x90