ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.