사용자가 정의한 함수
DBMS에 저장되고 사용되는 함수
SQL에서 select, insert, update, delete statement에서 사용할 수 있음
→ delimiter $$
CREATE FUNCTION 함수_이름()
RETURNS 자료형
NO SQL (→ MySQL만 해당)
BEGIN
함수 내용
RETURN ();
END
$$
delimiter ;
loop를 돌면서 반복적인 작업 수행 가능
case 키워드로 값에 따른 분기 처리 가능
에러 핸들링하거나 에러를 일으키는 등의 다양한 동작 정의 가능
stored function 삭제 → DROP FUNCTION stored_function_name;
사용자가 정의한 프로시저
RDBMS에 저장되고 사용되는 프로시저
구체적인 하나의 태스크를 수행
→ delimiter $$
CREATE PROCEDURE 이름(파라미터-IN, OUT)
BEGIN
내용
END
$$
delimiter ;
조건문을 통해 분기 처리 가능
반복문 수행 가능
에러 핸들링, 에러 일으키는 등의 다양한 로직 정의 가능
…
presentation tier : 사용자에게 보여지는 부분을 담당하는 tier
Logic tier : 서비스와 관련된 기능과 정책 등등 비즈니스 로직을 담당하는 tier
Data tier : 데이터를 저장하고 관리하고 제공하는 역할을 하는 tier → 비즈니스 로직 구현
→ stored procedure : RDBMS에 저장되고 사용되는 프로시저. 비즈니스 로직 구현에 사용
데이터베이스에서 어떤 이벤트가 발생했을 때 자동적으로 실행되는 프로시저
데이터에 변경이 생겼을 때 이를 계기로 자동적으로 실행되는 프로시저를 의미
→ delimiter $$
CREATE TRIGGER 이름
BEFORE UPDATE → 업데이트가 발생할 때 마다 트리거가 동작하도록(업데이트 전에)
ON users FOR EACH ROW → users 테이블에 대해 업데이트가 발생했을 때, 업데이트 row에 대해 실행
BEGIN
내용
END
$$
delimiter ;
가시적이지 않아서 개발, 관리, 문제 파악이 힘들 수 있음
많이 사용하면 연속적인 트리거가 발생해서 파악이 힘들 수 있음
과도한 트리거 사용으로 응답이 느려질 수 있음
디버깅이 어려움
문서 정리가 중요