본문 바로가기
  • 포르쉐타고싶다

Procedure3

[mysql] procedure의 인자로 배열 전달 : FIND_IN_SET 1. 배경 데이터베이스와 통신을 하면서 복잡한 쿼리문은 procedure을 이용해서 보다 효율적인 네트워킹할 수 있다. 프로시저에는 인자를 담을 수 있어 같은 내용의 프로시저에 변수만 다른 경우 상황에 맞게 프로시저를 함수같이 사용할 수 있다. 하지만 일반적인 함수와 다르게 프로시저는 배열을 인자로 전달받지 못한다. 반대로 프로시저를 사용해야 하는 대표적인 경우 중 하나가 반복문, loop이다. 다른 테이블 자체에서 loop를 돌리는 경우는 별다른 배열인자가 필요하지 않지만 유저가 무언가를 선택한 것에 대해서 그 배열을 가지고 loop를 돌리는 프로시저를 구현해야 한다면 프로시저의 인자로 배열을 넣어주어야 하는 상황이 종종 발생한다. 그렇다면 프로시저의 인자로 배열을 어떻게 넣어줄 수 있을까 바로 FIN.. 2020. 4. 24.
[MySQL] trigger란 1. 배경 서버와 DB가 통신을 할 때, 소켓통신이 아닌 이상 서버가 요청한 쿼리문을 통해 DB가 수정된다. 하지만 한 테이블에 여러 테이블이 얽혀있는 경우가 있다. 예를 들어, 한 게시물에 '좋아요'를 누르면 1) 게시물 좋아요 갯수 키 값 1 증가 2) 게시물 좋아요 테이블에 {게시물 - 유저(좋아요 누른)} 데이터 추가 3) 알림 테이블에 좋아요 추가 알림 추가 . . . 등등 여러 테이블이 동시에 수정되는 경우가 있다. 이런 단일 상황에 정말 여러개의 쿼리를 직접 만들어야 하는걸까? 아니다. 2. 개념 trigger : 방아쇠 - 어떠한 상황이 발생하면 그에 따라 자동으로 수행되도록 정해놓은 프로시저 trigger는 위에서 설명한 것과 같이 한 테이블에 변화가 생겼을 때 그것과 연관된 다른 테이블.. 2020. 4. 15.
[MySQL] 프로시저를 사용한 cursor loop fetch 적용(sql의 for문) DB와 서버를 만지다 보면 DB에서 가져온 데이터 목록에 대해서 일괄처리, 그 중 반복문을 돌려 처리를 해야 하는 상황이 생긴다. 그런 상황은 단순한 상황과 복잡한 상황으로 나눠서 보자 예를 들어보자 먼저 단순한 상황을 생각해 보면 쿼리를 통해 db에서 가져온 목록들에 대해 for문을 돌려 특정 컬럼에 대해 분류를 해서 응답을 하는 경우가 있겠다. 이 같이 단순한 경우는 1. 쿼리문(DB)안에서 ORDER BY를 이용해 분류하고 서버에서 어느정도 분류된 데이터를 for문으로 돌려 나누는 방법 2. 쿼리문(DB) 단계에서는 다른 분류 없이 단순 select문을 통해 서버로 가져온 다음 서버단에서 for문을 통해 분류하는 방법 으로 나눌 수 있을 것이다. 이번엔 복잡한 상황을 생각해보자 예를 들어 스타벅스 .. 2020. 4. 6.