오늘은 스토어드 프로시저(stored procedure)에 대해서 알아보도록 하겠습니다. 스토어드 프로시저는 일련의 SQL문들을 하나로 묶어서 한 번에 수행할 수 있도록 도와주는 기능입니다.
스토어드 프로시저 사용법
스토어드 프로시저는 다음과 같이 만듭니다.
DELIMITER //
CREATE PROCEDURE 프로시저명()
BEGIN
SQL문
...
SQL문
END //
DELIMITER ;
호출할 때 사용할 이름을 만들어 주고, BEGIN과 END // 사이에 SQL 문들을 넣어주면 됩니다.
그리고 생성한 프로시저를 호출할 때는 다음과 같이 명령을 주면 됩니다.
CALL 프로시저명();
한 번 예시를 보여드리겠습니다. test 데이터베이스에 student라는 테이블이 있는 상황이라고 가정하겠습니다.
위와 같이 프로시저를 만들고, CALL로 호출했더니 두 개의 SQL 문이 순차적으로 실행된 것을 확인하실 수 있습니다. 첫번째 SQL문으로 인해서 22개의 행이 반환되었고, 두번째 SQL문으로 인해서 1개의 행이 반환된 것입니다.
스토어드 프로시저를 삭제하는 방법은 다음과 같습니다.
DROP PROCEDURE 프로시저명();
방금 예제에서 생성한 프로시저를 삭제하고 싶다면, DROP PROCEDURE exProc(); 을 실행하면 됩니다.
스토어드 프로시저 사용 이유
제 첫 직장 사수분께서 항상 강조하셨던 것이 나중에는 백엔드나 응용 프로그램에서 쿼리를 직접 작성하지 말고 스토어드 프로시저로 다 바꿔야 한다였습니다. 스토어드 프로시저를 사용하면 다음과 같은 이점이 있습니다.
1. 스토어드 프로시저를 사용하면 MySQL의 성능 향상에 도움이 됩니다. 매번 긴 쿼리를 전송하지 않고 몇 글자로 스토어드 프로시저만 호출하면 되기 때문입니다. 적은 양의 데이터를 MySQL 서버로 보내면 되니 네트워크 부하를 많이 줄일 수 있겠죠.
2. 누군가 테이블에 직접 접근하여 SELECT, UPDATE, DELETE 등을 수행하는 것은 위험 부담이 있지만, 만들어놓은 스토어드 프로시저를 통해서 데이터를 조작한다면 훨씬 더 안전할 것입니다.
3. SQL문을 수정할 필요가 있는 경우 백엔드나 응용 프로그램의 코드를 수정할 필요없이 스토어드 프로시저만 수정하면 되니까 유지 보수가 편리해집니다.
참고자료
[1] 우재남 지음, "이것이 MySQL이다", 한빛미디어(2020)
'DB > SQL' 카테고리의 다른 글
[MariaDB] Order by, 여러 개로 정렬하기 (더 중요한 것을 앞에) (2) | 2021.05.28 |
---|---|
[MariaDB] SELECT 한 것을 INSERT 하기, INSERT INTO ... SELECT문 (2) | 2021.05.18 |
[MariaDB] 특정 열의 값이 NULL이 아닌 것만 보려면 (2) | 2021.05.17 |
MySQL workbench에서 select로 조회했는데 row들이 잘 안 보일 때 (0) | 2021.05.14 |
MySQL workbench에서 delete 안 될 때 해결방법 (error code: 1175) (0) | 2021.04.23 |
[sqlite3] 윈도우 10에 sqlite3 설치 및 환경변수 path 설정하기 (0) | 2021.04.17 |
[MariaDB] enum 데이터 타입 (0) | 2021.03.25 |
[sqlite3] JOIN으로 서로 다른 테이블의 컬럼들 붙이기(내부 조인, 외부 조인) (0) | 2021.03.19 |