[Daily Contents] 알아두면 쓸모있는 데이터베이스 객체(기능편2)


6. (Stored) Procedure

  • 하나의 요청으로 여러 SQL문을 실행(가능)
  • 네트워크 소요시간을 줄일 수 있음
  • 리턴값 없을 수도 있음
  • 리턴값 여러 개 반환 가능
CREATE PROCEDURE '프로시저명' (
  파라미터
)
BEGIN
  수행할 쿼리
END

7. User / 권한

  • MYSQL의 사용자
  • grant 명령어를 통해 권한 부여
  • revoke 명령어를 사용해 권한을 제거
  • FLUSH PRIVILEGES; 을 통해 권한 반영
CREATE USER {username}@{ip} identified by 'password';
DROP USER {username}@{ip};
grant {권한} privileges on {스키마}.{테이블} to {username}@{ip};
revoke {권한} privileges on {스키마}.{테이블} to {username}@{ip};

8. Trigger

  • 어떤 상황이 발생했을 때 미리 정해진 Action이 자동으로 실행.
  • 특정 테이블에 INSERT, UPDATE, DELETE문이 수행될 때 자동으로 동작.
  • 변경 전 또는 변경 후의 행을 OLD, NEW 라는 가상 변수를 사용하여 읽음.
이벤트 OLD NEW
delete O X
insert X O
update O O

사용 가능 O 사용 불가능 X

CREATE TRIGGER '트리거명' AFTER UPDATE ON '테이블명'
FOR EACH ROW
BEGIN

END

TMI - 분기문

  • 필요에 따라 일반적인 쿼리문 내에서 분기문을 활용할 수 있음
  • SELECT절 뿐 아니라 WHERE절에서도 분기문 사용 가능

* CURSOR

  • 테이블에서 한 행씩 처리하기 위한 방식
  • CURSOR, LOOP, FETCH 등의 구문을 사용
  • 성능상 좋지 못해 권장하지 않으며, 실시간 데이터 처리는 매우 위험
DECLARE >> OPEN >> FETCH >>(<<no<<)>> EMPTY >>yes>> CLOSE

Q&A

Q. 로그를 남기면 어떻게 유용하게 사용할 수 있는지 궁금함.
A. 현재 유저들이 얼마나 많은 인원이 등록, 삭제, 수정 등을 하는지 확인할 수 있는 용도 등.
Q. 객체들을 많이 사용하게 될 때 부작용은 있을지?
A. 성능을 무시하고 개발 기능만을 위해 만든 것. 이렇게 만들었는데 테이블 구조를 변경할 경우 필요한 데이터를 찾을 때 일일히 찾아봐야 하는 부작용이 발생함.
Q. 커서는 프로시저에서만 사용할 수 있는 것인가.
A. Function 내에서는 INSERT, DELETE만 사용할 수 있으므로 일반적으로는 커서는 프로시저에서만 사용할 수 있음.
Q. JPA 같은 ORM을 이용해서는 사용할 수 없고 SQL에서 직접 해야 하는 것인지.
A. JPA에서는 객체화되어있기 때문에 사용할 수 없음. 하지만 필요하다면 쿼리를 날릴 수는 있음
Q. DB 객체를 사용하는 것과 코드로 같은 작업을 처리할 때를 비교해서 서로 장단점은 무엇이 있을지.
A. DB를 왔다갔다 하는 작업을 줄일 수 있음.

댓글남기기