내가 한 노력들

[DB] 객체 - 데이터 사전, 인덱스, 뷰, 시퀀스, 동의어 본문

IT 공부/DB

[DB] 객체 - 데이터 사전, 인덱스, 뷰, 시퀀스, 동의어

JONGI-N CHOI 2021. 12. 2. 12:00

데이터 사전

데이터베이스를 구성하고 운영하는데 필요한 모든 정보를 저장하는 테이블 

 

 

사용자가 소유한 객체의 정보, 사용자 정보등등 확인할 수 있습니다.

 

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES;

위의 코드는 MySQL에서 사용자의 테이블들의 이름을 모두 검색하는 기능을 합니다. 

 

 


인덱스

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

 

 

인덱스 생성

CREATE INDEX 인덱스 이름
ON 테이블 이름 (열1 [ASC | DESC],
				열2 [ASC | DESC]);

 

인덱스 삭제

DROP INDEX 인덱스 이름;

뷰는 가상 테이블이라고도 하고, 하나 이상의 테이블을 조회하는 SELECT문을 저장한 객체입니다.

 

사용하는 이유

SELECT문을 간단히 사용할 수 있다 (가독성)

노출시키고 싶은 열만 노출시킬 수 있다 (보안성)

 

뷰 생성

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰 이름 (열이름)
AS (SELECT문)
[WITH CHECK OPTION [CONSTRAINT 제약조건]]
[WITH READ ONLY [CONSTRAINT 제약조건]];

OR REPLACE : 기존에 같은 이름의 뷰가 있을시 대체

FORCE : 저장할 SELECT문의 테이블이 존재하지 않아도 강제로 생성

NOFORCE : 저장할 SELECT문의 테이블이 존재할 경우에만 생성

WITH CHECK OPTION : 지정한 제약 조건을 만족하는 데이터에 한해 DML작업이 가능하도록

WITH READ ONLY : SELECT만 가능하도록 (뷰 열람만 가능하도록)

 

 

뷰 삭제

DROP VIEW 뷰 이름;

 


시퀀스

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

 

시퀀스 생성

CREATE SEQUENCE 시퀀스 이름
[INCREMENT BY n]
[START WITH n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE]

INCREMENT BY : 시퀀스 증가 값
START WITH : 시퀀스 시작 값
MAXVALUE  : 시퀀스 최대값
MINVALUE : 시퀀스 최소값
CYCLE | NOCYCLE : 시퀀스 최대값일 때, 다음 스퀀스를 생성하면 처음부터 갈 것인지 (CYCLE), 에러출력 (NOCLE)

 

 

시퀀스 사용

오라클에서 시퀀스를 사용하는 방법은 2가지 있다. 

시퀀스 이름.CURRVAL

시퀀스에서 마지막으로 생성한 번호를 반환

 

시퀀스 이름.NEXTVAL 

다음 시퀀스 번호를 생성

INSERT INT 학생 (NO, NAME)
VALUES (시퀀스.NEXTVAL, '홍길동');

위와 같이 사용할 수 있다. 

 

 

 

MySQL에서는 시퀀스의 기능이 따로 없어서 구현해줘야 한다고 한다. 아래의 링크에서 사용법을 볼 수 있습니다.

 

https://proudin.tistory.com/28

 

 


동의어

동의어는 DB에서 사용되는 객체들의 이름을 변경하여 사용하는 것 입니다. 

앞서 배웠던, AS를 이용한 별칭사용같은 기능과 똑같습니만, 차이점은 DB에 동의어가 저장되는 것이기 때문에, 

지속적으로 사용이 가능하다는 것 입니다.

 

동의어 생성

CREATE [PUBLIC] SYNONYM 동의어 이름
FOR [사용자.][객체 이름];

PUBLIC : 생략하게 되면, 동의어를 생성한 사용자만 동의어를 사용가능하고, PUBLIC을 추가하면 모든 사용자가 사용

사용자. : 동의어의 소유 사용자를 결정

객체 이름 : 동의어의 대상 객체

 

 

실제 적용

CREATE SYNONYM S
FOR 학생;
SELECT * FROM 학생; --동의어 적용전
 
SELECT * FROM S;  -- 동의어 적용후