Post

함수, 트리거, 프로시저

1. 함수

  • DBMS에서 제공되는 공통적 함수 이외에 사용자가 직접 정의하고 작성
  • SQL을 활용하여 일련의 로직을 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 모듈

Untitled

1
2
3
4
5
6
7
8
9
10
11
-- passwords를 입력하면 해당 결과를 '*****'로 반환
delimiter $$
create function sf_password (passwords varchar(255)) 
	returns varchar(255)
begin
	return '*****';
end;

select sf_password('1234'); 
drop function sf_password;
delimiter;

Untitled 1

2. 프로시저

  • 여러 개의 SQL문을 같이 실행 (같이 실행이라기 보다는 비즈니스 업무 로직을 수행)
  • 네트워크를 통한 쿼리의 전송 속도가 빠르다고 함
  • DB에서 바로 수정 적용이 가능한 장점 있음
  • DB와 서버 개발을 구분해서 개발 가능 (사실, DBA가 해야할 일)

Untitled 2

1
2
3
4
5
6
7
8
9
delimiter $$
create procedure sp_select_member()
begin
	select * from mytable limit 2 offset 2;
end;

call sp_select_member();
drop procedure sp_select_member;
delimiter;

Untitled 3

3. 트리거 (Trigger)

  • 특정 조건이 만족하면 저절로 실행되는 일종의 장치
  • 프로시저(Procedure)나 함수(function)과 다르게 한번 설정을 하면 동작을 항상 감시하고 있다가 조건에 해당하는 동작이 수행되는 순간 실행되는 특징
  • 주로, INSERT, UPDATE, DELETE 동작에 사용
  • 동작 시점은 After, Before가 있음

Untitled 4

Untitled 5

Untitled 6

(예제) 아래 테이블에서 내용이 바뀌면 history 테이블에 내용이 들어가도록 진행

  • member_detail 테이블

Untitled 7

  • member_detail_history 테이블

Untitled 8

  • 사전 과정 : trigger 생성
1
2
3
4
5
6
7
8
9
10
11
delimiter $$
create trigger tg_member_mobile_no_history
	before update on member_detail
    for each row
    begin
		insert into member_detail_history
			(member_type, user_id, mobile_no, update_date)
		values 
			(old.member_type, old.user_id, old.mobile_no, now());
    end;
delimiter;
  • 과정1 : 아래와 같이 member_detail row 하나를 update
1
2
3
4
5
update member_detail
set
	mobile_no = '01055555555'
where member_type = 'email'
	and user_id = 'test@naver.c0m'
  • 과정2 : member_detail 변경내용 확인
1
select * from member_detail;

Untitled 9

  • 과정3 : member_detail_history에서 이전 변경내용 확인

Untitled 10

This post is licensed under CC BY 4.0 by the author.