-
day10 - 오라클 (CREATE, ALTER, RENAME, MODIFY, 제약조건, 외래키, 인덱스, 뷰, 시퀸스)KIC/DB 오라클 2021. 7. 13. 00:03반응형
[CREATE]
create table ddl_test
(no number(3),
name varchar2(10),
birth date default sysdate);
-> 일반 테이블을 생성한다.
[테이블 생성시 주의사항]
1. 테이블 이름은 반드시 문자로 시작해야 한다. 즉 숫자로 시작할 수 없다. 단 숫자가 포함되는 것은 가능 특수 문자도 가능하지만 테이블 생성시 ""(겹 따옴표)로 감싸야 하며 권장하지 않는다.
2. 테이블 이름이나 컬럼 이름은 최대 30bytes 까지 가능 즉 한글로 테이블 이름을 생성할 경우 최대 15글자까지 가능
3. 테이블 이름은 한명의 사용자가 다른 오브젝트들의 이름과 중복 사용 할 수 없다.
4. 테이블 이름이나 오브젝트 이름을 오라클이 사용하는 키워드로 사용하지 않는 것을 권장
[테이블 구조만 가져오기]
-> 테이블 구조만 가져오고 데이터 안 가져오기
create table dept5
as
select * from dept2
where 1=2;
-> 이렇게 where 조건문을 일부러 틀리게 해서 테이블 구조만 복사해낸다.
[ALTER]
-> 만들어져 있는 오브젝트를 변경하는 명령어이다.
-> 즉 테이블 같은 경우에는 컬럼을 추가하거나 컬럼을 삭제하거나 컬럼 이름이나 테이블 이름ㅇ르 바꾸는 등의 작업을 할 수 있다.
-> 부하가 많이 걸리는 명령어 이므로 사용량이 많은 시간에 수행하는 것은 위험하니 주의할 것
[기본값 지정하여 추가하기]
alter table dept6
add(loc2 varchar2(10) default '서울');
select * from dept6;
[RENAME]
-- 컬럼 이름 변경
ALTER TABLE dept6 rename column loc2 to area;
-- 테이블 이름 변경
rename dept6 to dept7
[MODIFY]
-modify로 칼럼의 데이터 크기 변경
desc dept7;
--modify
alter table dept7
modify(dcode varchar(10));
desc dept7;
[컬럼 삭제]
alter table dept7 drop column loc;
--다른 테이블에 의해 참조되는 테이블을 지울 때 cascade constraints 사용
alter table dept7 drop column loc cascade constraints;
[일기 전용 테이블로 변경]
create table t_read
(no number, name varchar2(10));
insert into t_read
values(1, 'AAA');
--읽기 전용으로 변경(이후 insert 시 에러)
alter table t_read read only;
[읽기 모드에서 삭제는 가능]
alter table t_read read only;
drop table t_read;
[읽기 쓰기 모드로 변경하기]
alter table t_read read write;
insert into t_read values(1, 'AAA');
[제약조건]
-> 기본키는 없을 수는 있지만 2개 이상 설정 할 수 없다.
[각 제약조건의 설정 방법]
CREATE TABLE emp3
(no NUMBER(4)
CONSTRAINT emp3_no_pk PRIMARY KEY, -- CONSTRAINT로 제약조건의 이름 설정하기
name VARCHAR2(10)
CONSTRAINT emp3_name_nn NOT NULL, -- NOT NULL 설정
jumin varchar2(13)
CONSTRAINT emp3_jumin_nn NOT NULL
CONSTRAINT emp3_jumin_uk UNIQUE, -- UNIQUE 설정
area NUMBER(1)
CONSTRAINT emp3_area_ck CHECK ( area <5), -- CHECK 조건으로 설정된 값만 입력을 허용
deptno VARCHAR2(6)
CONSTRAINT emp3_deptno_fk REFERENCES dept2(dcode)
);
[제약조건 에러 처리]
1. Null 자료 입력 시 not null 일때만 error 처리한다.
2. UNIQUE 는 같은 컬럼에 같은 자료를 입력하면 error 처리한다.
3. Check는 조건식에 맞지 않으면 error 처리한다.
4. Primary key는 not null + unique이다.
5. foreign key는 입력시에 reference key 값이 없으면 error 처리한다.
[외래키]
CREATE TABLE emp4
(no NUMBER(4) PRIMARY KEY,
name VARCHAR2(10) NOT NULL,
jumin VARCHAR2(13) NOT NULL UNIQUE,
area NUMBER(1) CHECK ( area <5),
deptno VARCHAR2(6) REFERENCES dept2(dcode)
);. -- 약식 생성
[테이블 생성 후에 외래키 제약조건 추가하기]
alter table emp4
add constraint emp4_no_fk foreign key(no)
references emp2(empno);
[on delete cascade]
-> 부모 테이블에서 삭제 시 자식 테이블의 해당 행 자체가 삭제된다.
[on delete set null]
-> 부모 테이블에서 삭제 시 자식 테이블의 해당 행의 컬럼 값이 null이 된다.
[foreingn키 추가 시 주의사항]
-> 외래 키 추가시에 외래키를 제공해주는 해당 부모 테이블의 칼럼이 unique이거나 pk인 칼럼이어야 한다.
-> 그래서 첫번째 쿼리문에서 유니크 하지 않은 컬럼을 참조하다 에러가 났다.
-> 부모 테이블에서 해당 컬럼을 유니크 설정해준다.
-> 다시 외래키로 설정하였더니 정상적으로 외래키가 적용된다.
[인덱스]
-> 인덱스는 퍼포먼스 때문에 쓰는데 요즘은 별로 필요가 없다.
-> 귀찮은 작업이기 때문에 추천하지 않는다고 한다.
[인덱스 주의사항]
-> DML에 취약하다.
[뷰]
-> 뷰는 굉장히 많이 사용한다.
-> 뷰는 가상 테이블을 말한다.
-> 오브젝트 단위로 권한을 다르게 줄 수 있어서 뷰 별로 다른 권한을 부여해서 제공가능
-> 뷰 생성을 위한 권한 부여
[단순 view]
[view 생성 예제1]
create or replace view v_prof
as
select profno, name, email, hpage
from professor;
-> 뷰는 인덱스가 없다.
[view 생성 예제2]
create or replace view v_prof_dept
as
select p.profno "교수번호",
p.name "교수명",
d.dname "소속학과명"
from professor p, department d
where p.deptno = d.deptno;
[sequence]
-> 연속적인 번호를 만들어 주는 기능
[시퀸스 사용 예제]
CREATE SEQUENCE seq_jumun_no
INCREMENT BY 1
START WITH 1000
MAXVALUE 1010
MINVALUE 990
CYCLE
CACHE 2;
--확인
select seq_jumun_no.nextval from dual;
select seq_jumun_no.currval from dual;
[오라클 한글 관련]
-> 웬만하면 오라클에서 한글을 쓰지 않는 것을 권함
-> 플랫폼을 바꿀 때마다 문제가 생길 수 있기 때문에
-> 오라클에서 한글의 한 글자가 varchar 3바이트를 사용한다는 것을 알 것
-> 속성의 바이트 제한은 30바이트 이하로 해야 하는 것을 염두해 둔다.
-> 한글이 들어가는 값 또한 넉넉하게 공간을 할애하는 것이 좋다.
300x250'KIC > DB 오라클' 카테고리의 다른 글