코딩 연습장/데이터베이스(DB)

데이터 베이스- 객체

Do아 2021. 3. 17. 00:50
728x90

2021/03/03(수)

6번째 수업

※ 데이터베이스에서 존재하는데 존재하지 않습니다.로 뜨는 이유

- 존재여부를 알려주게 되면 악의적인 의도를 지닌 타인의 의해 노출 될 수 있기 때문에

(어떤 사이트나 게임에서 비밀번호가 틀렸다거나 아이디가 틀렸을 때 명확하게 어떤 것이 틀렸는지 말해주지 않는 경우가 있는데 보안을 조금 더 높이기 위해 였다는 사실)

- index/view/인라인 뷰/시퀀스/동의어

1) index

- 데이터 검색 성능의 향상을 위해 테이블 열에 사용하는 객체를 뜻함

테이블에 보관된 특정 행 데이터의 주소, 즉 위치 정보를 책 페이지처럼 목록으로 만들어 놓은 것.

CREATE INDEX 인덱스명 ON 테이블명(열이름1 ASC OR DESC

열이름2 ASC OR DESC....);

--> 인덱스 생성 명령어

SELECT * FROM USER_INDEXES;

--> 생성된 인덱스 보여주는 명령어

DROP INDEX 인덱스명;

---> 인덱스 삭제 명령어

2) VIEW

흔히 가상 테이블로 부르는 뷰 하나 이상의 테이블을 조회하는 SELECT문을 저장한 객체를 뜻함

(실무에서 많은 분량의 SELECT문을 VIEW로 저장하여 손쉽게 쓰기위한 용도, 보안성이 뛰어남)

뷰를 생성할 때 CREATE문으로 생성하지만 계정에 VIEW를 생성하는 권한을 줘야함

WIN+R -> CMD 검색 ->

CMD창에서

SQLPLUS SYSTEM/본인이 설정한 비밀번호

SQL> GRANT CREATE VIEW TO SCOTT(본인이 사용하는 USER)

권한을 부여하고 SQL DEVELOPER에서 명령어 입력

CREATE OR REPLACE VIEW 뷰명 (열이름1, 열이름2, ...)

AS (저장하고 싶은 SELECT문) 그외 옵션;

--> SELECT문을 저장하는 뷰 완성

SELECT * FROM USER_VIEWS;

만들어져 있는 모든 뷰 보기

DROP VIEW 뷰명;

뷰 삭제하기

3) 인라인 뷰

CREATE문을 통해 SQL문에서 일회성으로 만들어서 사용하는 뷰를 인라인뷰라고 한다.

EX) 서브쿼리, WITH절

SQL문을 짜다 보면 정렬된 것 중에 몇 개의 데이터만을 출력하는 명령어가 필요

SELECT ROWNUM, 필드명 FROM 테이블명;

--> 행의 번호(= 열의 데이터가 숫자로 출력)

어떤 기준으로 정렬을 하고 위에서 몇번까지 출력하고 싶을 때

SELECT ROWNUM, 필드명 FROM 테이블명 ORDER BY 필드명 ASC OR DESC;

--> 이미 ROWNUM이 출력된 상태에서 정렬을 하는 것이기 때문에 순서대로 나오지 않는다

SELECT ROWNUM, 별칭.필드명 FROM (SELECT 필드명 FROM 테이블명 WHERE 조건 ORDER BY 필드명 ASC OR DESC)

--> 인라인 뷰로 묶어서 이미 정렬된 필드를 ROWNUM해주면 해당 순서대로 나온다

4) 시퀀스

특정 규칙에 맞는 연속 숫자를 생성하는 객체

은행이나 병원의 대기 순번표와 마찬가지 계속 다음 번호를 만들어 주는 역할

CREATE SEQUENCE 시퀀스명

INCREMENT BY 숫자

START WITH 숫자

MAXVALUE 숫자

MINVALUE 숫자

CYCLE OR NOCYCLE

NOCACHE OR CACHE 숫자;

--> 시퀀스 생성하는 명령어

INCREMENT BY : 증가시킬 값

START WITH : 시작값

MAXVALUE : 최대값

MINVALUE: 최소값

CYCLE/NOCYCLE : 최대값까지 돌고 나서 다시 처음으로 갈것인가/ 최대값까지만 하고 끝낼것인가

NOCACHE/ CACHE : 시퀀스가 생성할 번호를 메모리에 미리 할당해 놓은 수를 지정/ 미리 생성하지 않도록 설정 * 생략하면 기본값 20

SELECT 시퀀스명.NEXTVAL FROM DUAL;

--> 실행시키면 설정해줬던 대로 10부터 1씩 증가하여 수행

NEXTVAL은 다음 번호를 생성, CURRVAL은 시퀀스에서 마지막으로 생성한 번호를 반환

* CURRVAL은 시퀀스를 생성하고 바로 사용하면 번호가 만들어진 적이 없으므로 오류가 난다.

INSERT INTO 테이블명 (필드명,...) VALUES(시퀀스명.NEXTVAL,필드값,...);

---> 시퀀스에 저장되어있는 시작순서와 증가 값에 따라 값이 입력

ALTER SEQUENCE 시퀀스명

고치고 싶은 옵션;

--> ALTER를 사용해서 시퀀스의 내용을 수정할 수 있다 하지만 START WITH는 수정할 수 없다.

DROP SEQUENCE 시퀀스명;

--> 시퀀스 삭제

728x90