2016년 1월 13일 수요일

[oracle]alter table 을 이용한 테이블 변경

alter table 테이블명

add( 컬럼스펙 || 제약스펙);


alter table 테이블명

modify(  컬럼스펙 || 제약스펙);


컬럼스펙  : 컬럼명 테이터타입   (  not null/ null    or    unique    or   check )
제약스펙  : constraint 제약조건명 primary key (칼럼명1, 칼럼명2, ...)
               constraint 제약조건명 foreign key (칼럼명1, 칼럼명2, ...)
               references 참조테이블명 (컬럼명1, 칼럼명2, ...)




//기본키 제약조건 삭제
alter table 테이블명
drop primary key;        //primary key(컬럼) 명시적 지정 삭제가능

//기타 제약조건 삭제
alter table 테이블명
drop constraints SYS_C0015273 <- 제약조건 이름

//컬럼삭제
alter table 테이블명
drop column 칼럼명;

//테이블명 변경
alter table 테이블명
rename to 변경테이블 명;



주의 사항1

add 시 동시에 칼럼을 주고 제약조건을 걸수있을거 같지만 안된다..

예를들면
create 문에서

create table job(
job_money varchar2(10) not null
constraint job_job_money check(job_money in ('10000','20000'))

); //가능

alter table job
add (job_money2 varchar2(20) null  check( job_money in  ('1000000','2000000')));//불가


가능 하게 하려면..


alter table job
add (job_money2 varchar2(20) null)
modify (constraint job_money2_check check( job_money2 in  ('1000000','2000000')));

이렇게 해줘야 가능

add 랑 modify 키워드를 같이 써야한다.

주의 사항2

컬럼에 지정한 제약조건이 여러가지 일 경우 모든 제약조건에 만족해야만 데이터 입력이 가능하다.

주의 사항3

제약조건을 변경시

제약조건 이름을 통한 modify 는 문법오류를 발생한다.


create table job(
job_money varchar2(10) not null
constraint job_job_money check(job_money in ('10000','20000'))

);

테이블 생성후
job_job_money 이름의 제약조건에 내용을 변경하는건 될거 같지만 불가능 하다.

alter table job
modify( constriant job_job_money check(job_money in ('10','20'))); //오류

그럼 결국 제약조건을 삭제하고 다시 걸어줘야함

alter table job
drop constraint 제약조건명;


간단한 내용이지만 문법을 다 외우는 방법보단 내부적 개념을 살펴보고 작성할수 있게끔 정리를 해보았다.














댓글 없음:

댓글 쓰기

[lunux]리눅스 폴더별 용량 확인

리눅스 폴더별 용량 확인 조회 하고자 하는 디렉토리 리스트가있는 경로로 이동후 du -h --max-depth=1