DBMS/MySQL

230922 금) 데이터베이스 개체

roofTopCaat 2023. 9. 22. 10:55

테이블은 DB에서 제일 많이 쓰이는 핵심 개체다. 그러나 DB는 테이블 외에 인덱스 / 뷰 / 스토어드 프로시저 / 트리거 / 함수 / 커서 등의 개체도 필요하다.

 

뷰는 테이블의 일부를 제한적으로 표현할 때 사용한다

 

스토어드 프로시저는 SQL문으로 프로그래밍이 가능하게 해준다 (ex. 오라클에서 구구단 실행)

 

트리거는 데이터 오입력을 사전에 방지한다

 

인덱스는 필요한 정보를 좀더 빠르게 찾기 위해 테이블을 덜어내 순차적으로 정리한 것을 말한다 백과사전 앞쪽의 찾아보기와 비슷하다

 

인덱스

 

select * from member where member_name = '도깨비'; 의 경우

 

Full Table Scan으로 처음부터 끝까지 찾는다. 이러면 시간도 오래 걸리고 리소스도 많이 잡아먹는다

 

create index idx_member_name On member(member_name);으로 인덱스를 생성해준다

 

다시 select * from member where member_name 을 실행한 후 Execution Plan을 보면 

 

생성된 index를 통해 결과값을 찾았음을 알 수 있다

 

 

뷰는 테이블과 상당히 비슷한 DB개체다. 보안 강화 / SQL문의 쉬운 사용 등의 특징이 있다

 

뷰는 테이블과 비슷하게 보이고 일반 사용자 입장에선 동일하게 취급되나 실제 데이터가 없으며 진짜 테이블에

 

링크되어 있는 개념이다 (브라우저의 바로가기 아이콘과 비슷)

 

SQL문에서 create view member_vier AS SELECT * FROM member; 로 뷰를 생성한다

 

select * from memb_view; SQL을 실행하면 회원 테이블에 접근했을 때와 동일한 결과값이 나온다

 

 ● 보안에 도움됨

 

 ● 긴 SQL문을 간략하게 만든다

 

등의 특징이 여기서 드러난다

 

스토어드 프로시저

 

SQL문으로 일반 프로그래밍 언어처럼 코딩을 할 수 있게끔 한다. 상대적으로 불편하지만 프로그래밍 로직을 작성

가능하기에 때로 유용하게 사용된다

 

SQL을 묶는 개념과 동시에 연산식, 조건문, 반복문 등도 사용 가능하다

 

select * from memb where memb_name = 'A';
select * from memb where memb_name = 'roofTopCaat'; 을 동시 실행할 때 별도의 탭으로 2가지의 결과가 도출된다

 

나중에 더 SQL이 길어지면 매번 동일한 SQL을 입력하는 것이 불편하다

 

따라서 이 SQL을 하나의 프로시저로 묶는다

 

DELIMITER // <- 프로시저를 묶기 위한 약속!
create procedure myProc() < 프로시저 이름 지정
begin
select * from memb where memb_name = 'A';
select * from memb where memb_name = 'roofTopCaat';
    end //
DELIMITER ; <- 프로시저를 묶기 위한 약속!

 

이제부터 따로 SQL문을 귀찮게 적을 필요 없이 CALL myProc();을 이용해 동일한 결과값을 뽑아낸다

 

삭제할 때는 DROP PROCEDURE 이름으로 없앤다