질문을 삭제하지 말아주세요.!
 
1
0
-1
트래잭션이후에 다른 사용자가 select가 안되도록 락을 걸고싶은데 어떤방법이 좋을까요 lockForUpdate() 사용해봤는데 select가 되는데 실수한건지 모르겠네요ㅠ
    CommentAdd your comment...

    2 answers

    1.  
      1
      0
      -1

      MySQL 기본 동작은 transaction 이 커밋되지 않아도 다른 세션에서 SELECT 가 가능한 REPEATABLE READ 입니다.

      매뉴얼을 보니 만약 SELECT 도 막으려면 transaction isolation level 을 serializable 로 설정해야 한다는데 이건 eloquent orm 가 아니라 query builder 를 사용해서 날려야 하는 거 같네요.

      아래 구문을 실행하면 설정이 변경됩니다.

      .

      SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;


      참고로 serializable 로 설정하면 트랜잭션이 있을 때 모든 SELECT 가 봉쇄되므로 아주 심각한 성능 저하가 있을 듯 합니다.

        CommentAdd your comment...
      1.  
        1
        0
        -1

        LOCK 개념을 잘 모르는데, 라라벨 파운데이션 코드의 lockForUpdate() 메서드를 까서 READ/WRITE LOCK 모두 거는 것인지 확인해 보는 것이 좋을 것 같습니다. 

        1. vkeldh

          lockforupdate도 해보았는데 select는 검색이 되더군요

          검색해보니 select은 라라벨 지원 함수로는 다 먹히더는걸로 보이길래 혹시 pdo를 이용해서 하시분이 있으신가 해서 질문드렸습니다 

          더찾아봐야할것 같습니다

        CommentAdd your comment...