뷰, 시퀀스, 시노님

2023. 11. 23. 11:12Daily Codig Reminder

  1.  단순뷰

    - 함수를 사용하는 경우에는 별칭부여해야
    create view emp_view4
    as select deptno, sum(sal) 총합
    from emp group by deptno;

    - 단순뷰로 생성시 dml 작업도 가능
    create view  emp_view5
    where deptno = 10;
    -> view 에서 바꾼거는 emp 에도 적용

  2. 복합뷰
    - 두개이상의 기본테이블에 대해서 정의(조인..)


  3. with check

    데이터의 무결성을 위해 기본키 또는 null 조건을 사용
    create view emp_view6
    as select empno, ename, sal, deptno
    from emp where deptno = 30;

    update emp_view6
    set deptno = 40
    where empno = 7499;
    -> 7499사원의 부서번호를 40으로 변경
    뷰에서 7499 사원이 빠지고 emp 테아블에서 40번으로 변경됨.

    뷰에 대해서 dml문이 수행되는 것을 where 조건에 일치하는 데이터만 변경하게 제거
    create view emp_view6
    as select empno, ename, sal, deptno
    from emp where deptno=30
    with check option;

    update emp_view6
    set deptno = 40
    where empno=7499;
    ->오류

  4. with read only

    뷰를 통한 dml 작업 불거능
    create view emp_view6
    as select empno, ename, sal, deptno
    from emp
    with read only;


  5. drop

    drop view emp_view6;
    ->뷰만 날아감


시퀀스★★★★★

  • 호출 될 때마다 자동으로 유일한 숫자를 생성
    테이블의 특정 컬럼값을 넘버링

  • 문법:
    CREATE SEQUENCE 시퀀스명
    [ START WITH n]
    [ INCREMENT BY n] [ MAXVALUE n | NOMAXVALUE ]
    [ MINVALUE n | NOMINVALUE ]
    [ CYCLE | NOCYCLE ]
    [ CACHE n | NOCACHE]




  • start with n

    시퀀스번호의 시작값 지정
    만일 10부터 시작되는 시퀀스를 생성하려면 start wth 으로 지정하면되고 생략시 1부터 시작함

  • increment by n

    연속적인 시퀀스 번호의 증가치를 지정할 때 사용됨
    만일 2씩 증가 ->  increment by 2
    음수값 설정가능, 생략시 1씩 증가

  • MAXVALUE n
    최대값을 지정

  • MINVALUE n
    최소값을 지정
    CYCLE-> 새로 시작하는 값 역할

  • cycle
    지정된 시퀀스값이 최대값까지 커지면 minvalue 값부터 다시시작.
    NOCYCLE은 증가가 완료되면 에러
  • cache
    생략시 기본적으로 20개를 생성, NOCACHE는 필요할 때마다 매번 시퀀스 값을 계산해서 반환
    데이터베이스를 종료하고 다시 사용할 경우에는 전에 썼던 시퀀스 값을 사용하지 못함

  • 시퀀스 생성

    create sequence dept_deptno_seq.nextval
    start with 10
    increment by 10
    maxvalue 100
    minvalue 5
    cycle
    nocache;
  1. NEXTVAL 과 CURRVAL
    select dept_deptno_seq.nextval from dual;
    → 102030405060708090100 5152535455565758595

    select dept_deptno_seq.currval from dual;
    → 현재값을 확인할 때 씀.

    create sequence dept_deptno_seq2 start with 100 — 100에서시작
    increment by -10 — -10씩
    maxvalue 150 — 10이되면 150에서 다시시작
    minvalue 10 — 최저값이 10
    cycle nocache;



  2. 시퀀스 수정

    - ALTER SEQUENCE문을 사용하여 증가치,최대값,최소값,CYCLE여부,캐시값 을 변경
    - START WITH옵션은 변경이 불가능하기 때문에 필요시 시퀀스를 삭제하고 재 생성
    → drop쓰고 재생성하라는 뜻.

    - 문법:
    ALTER SEQUENCE 시퀀스명
    [ INCREMENT BY n] [ MAXVALUE n | NOMAXVALUE ]
    [ MINVALUE n | NOMINVALUE ]
    [ CYCLE | NOCYCLE ]
    [ CACHE n | NOCACHE]

    create sequence dept_deptno_seq3;
    alter sequence dept_deptno_seq3
    increment by 10 — 증가값 수정
    cycle; — 사이클 활성
    → 기본값으로 설정된 시퀀스를 증가값 10, CYCLE 여부는 Y로 수정하기 위해
    ALTER SEQUENCES문을 사용하는 SQL문

  3. 테이블에 시퀀스 값 저장.

    create table dept06 (deptno number(4) primary key, dname varchar2(15), loc varchar2(15) );
    → 테이블 생성

    create sequence dept_deptno_sq4 start with 10 increment by 10 nocycle; → 시퀀스 생성

    ★★★★★
    insert into dept06 (deptno, dname, loc) values (dept_deptno_sq4.nextval, '개발', '서울');
    insert into dept06 (deptno, dname, loc) values (dept_deptno_sq4.nextval, '인사', '경기');
    insert into dept06 (deptno, dname, loc) values (dept_deptno_sq4.nextval, '관리', '부산');


동의어 (synoym)

  • 데이터 베이스 객체에 대한 별칭. 객체에 대한 접근방법 단순화.

  • select * from scott.dept;
    →scott.dept 를 별칭으로 바꿔서 씀.

  • 문법:
    CREATE [PUBLIC] SYNONYM 동의어
    FOR 스키마.객체;

  • 계정만들기
    create user tester IDENTIFIED by tester;
    grant connect , resource to tester;
    → 권한부여 sys에서

    alter user tester identified by tester;
    → 6개월마다 비밀번호 바꾸는 키

  • grant select on dept to tester;
    → 테스터에 스콧 dept에 select할 수 있는 권한 부여
  • 시노님만들기

    —SYS
    GRANT create synonym TO scott;

    --tester 계정
    CREATE SYNONYM dept_synonym FOR scott.dept;

  • 동의어 삭제
    -tester 에 drop synonym dept_synonym;


인덱스

  • select * from emp where ename= 'SMITH';
    → ename을 인덱스로 쓰기위한 준비

  • CREATE INDEX emp_ename_idx ON emp(ename);
    → 인덱스 생성

사용자관리

  • 계정:
    사용자 (sys가 추가) ⇒ 권한부여 (sys가 부여 grant 및 회수 가능 revoke )
  • role : 권한의 묶음
  • scott ⇒ tester 권한부여
    grant select on dept to tester;
    grant insert on dept to tester;
    grant update on dept to tester;
    grant delete on dept to tester;

  • user_grant 롤 생성
    grant select on dept to tester;
    grant insert on dept to tester;
    grant update on dept to tester;
    grant delete on dept to tester;
    grant user_grant to tester;
    → 4개를 한꺼번에 부여.
  1. 권한
    오라클 데이터베이스에서의 권한은 특별한 SQL문을 실행할 수 있는 권리를 의미
    시스템/객체
    CREATE SESSION 접속
    CREATE TABLE 테이블을 생성
    CREATE SEQUENCE 시퀀스를 생성
    CREATE VIEW 뷰를 생성
    CREATE PROCEDURE PL/SQL의 프로시저를 생성

    문법
    GRANT 시스템권한[,시스템권한]
    TO 사용자계정|role|PUBLIC;

    GRANT create session,create table,unlimited tablespace(테이블자리) TO user01;
    → sys aka관리자 계정에서 해야.

    select * from session_privs;
    →시스템 권한 조회

    REVOKE 시스템권한[,시스템권한] FROM 사용자계정|role|PUBLIC;
    →권한회수

    REVOKE create session FROM user01;
    → sys 에서

    create table dept (deptno number(4) primary key, dname varchar2(15), loc varchar2(15));
    → 테이블 생성

    GRANT select,insert ON dept TO user01;
    →scott 계정에서 권한 부여

    select * from user_tab_privs_made;
    → scott 계정이 유저01에게 부여한 권한 확 

    REVOKE INSERT ON DEPT FROM USER01;
    → scott 정에서 해랴함.

  2. 사용자에게 보다 효율적으로 권한을 부여할 수 있도록 여러 개의 권한을 묶어 놓은 것
    • 종류 select role from dba_roles;
      → role 찾기

    • SYS 에서
      create user user03 IDENTIFIED by user03;
      create role clerk;
      grant create session , create table, UNLIMITED tablespace to clerk;
      grant select on scott.dept to clerk;
      grant clerk to user03;

'Daily Codig Reminder' 카테고리의 다른 글

html 마무리  (1) 2023.11.27
html - head  (0) 2023.11.24
DDL , 뷰  (0) 2023.11.22
DML DDL summary  (1) 2023.11.20
Coding Summary  (1) 2023.11.20