본문 바로가기

CS ﹒ Algorithm/Database

데이터베이스 (4) 뷰 & 프로시저 & FUNCTION & 트리거 (Feat. MySQL)

 

 

 

 

1. 뷰(View)

-  뷰는 무엇인가?

1. 뷰는 가상 테이블이며 실존하는 테이블이 아니다.

2. 혹은 저장해놓은 쿼리를 불러와서 사용할 수도 있다.

3. 뷰는 일반적인 프로그래밍에서의 "변수"와 비슷하다.

 

- 뷰를 사용해서 얻을 수 있는 이점은?

1. 원하는 Culmn, Record를 사전에 만들어 쿼리로 저장함으로써 불필요한 반환값을 최대한 줄일 수 있다.

2. 복잡한 JOIN문 등을 뷰로 저장함으로써 단일 테이블을 사용하는 듯 간단한 쿼리로 불러와 사용할 수 있다.

3. 누군가에게 데이터 베이스를 공유할 일이 있을 때, 타인에게 보여주면 안되거나 혹은 쓸데 없는 정보를 모두 숨겨서 보낼 수 있다.

 

* 뷰로 쿼리를 저장하는 경우 대부분 타겟이 관계형 테이블이다. 결과를 나타내는 테이블들이기 때문에 잘못 건드렸다가는 문제가 생길 수 있다. 뷰는 오직 Read Only로만 사용할 것을 권장한다.

 

예시 )

 

 

그다지 복잡하지는 않지만 매번 해당 쿼리를 작성해서 데이터를 조회하는 것이 귀찮았던 나머지 뷰를 만들었다.

 

 

이제 우리는 고작 단 두 줄로 매번 원하는 데이터를 조회할 수 있다.

조회하기 위한 쿼리가 복잡하면 복잡할 수록 우리의 입꼬리는 더욱 높이 올라갈 것이다.

다음으로 넘어가자.

 

 

 

 

 

 

 

2. 프로시저(Procedure)와 펑션(FUNCTION)

 

 

둘이 겉으로 보기에는 굉장히 유사하기 때문에 세트로 묶었다.

일반적으로 우리가 개발 환경에서 사용하는 함수와 비슷한데 약간씩 차이가 존재한다.

아마 Abstract와 Interface를 처음 배울 때처럼 분간하기 어렵게 느껴질 것이다.

일단 예제를 보자.

 

 

1. 프로시저

 

 

이름에 식이 들어가는 모든 Customer를 호출하는 프로시저이다.

리턴 값이 없지만 프로시저도 리턴 값을 가질 수 있다. (심지어 여러개 가질 수도 있다.)

 

 

 

2. 함수(FUNCTION)

 

이번에는 함수다.

둘의 차이를 알겠는가?

알면 천재고 모르는 게 정상이다.

겉으로 드러나는 부분에서 차이를 찾아내기는 굉장히 힘들기 때문이다.

 

 

프로시저와 함수의 가장 큰 차이는 서버에서 작동하느냐, 클라이언트에서 작동하느냐의 차이가 있다.

또한 Function은 반드시 한 개의 리턴값을 가지기 때문에 보통 프로시저를 보조하기 위한 연산 용도로 사용되며, 프로시저는 일련의 작업 과정 (예 : 로그인) 전체를 수행하는 목적으로 사용된다.

다음으로 넘어가자.

 

 

 

 

 

 

3. 트리거 (Trigger)

 

- 트리거는 무엇인가?

데이터가 (INSERT | DELETE | UPDATE) 될 때 전후(BEFORE | AFTER)로 부수적인 효과를 줄 수 있다.

 

- 트리거의 사용 목적?

1. 테이블에 데이터를 입력, 수정, 삭제 시 로그를 기록하기 위해 사용할 수 있다.

2. 테이블에 입력되는 데이터의 무결성을 검사할 수 있다.

3. 테이블의 어떤 데이터에 변화를 줄 때 동시에 다른 테이블의 데이터에도 영향을 줄 수 있다.

 

* 트리거는 분명히 편리한 도구지만, 의도치 않은 사이드 이펙트로 인해 문제가 될 수 있으니 적당히 사용하는 것이 좋다.

 

 

예시)

 

위와 같은 형태의 테이블이 있는데, CustomerGroupId와 CustomerGroupDetailId가 합쳐진 문자열이 CustomerCategory로 들어가야하는데, 이것을 매번 직접 입력하기는 귀찮아서 자동 생성되게 만들었다.

 

 

INSERT문에서 마지막 항목을 '0'으로 기입했으나 02002로 값이 생성된 것을 확인할 수 있다.