jinviolet
33
2016-02-10 19:46:55
6
3516

mysql select 쿼리 결과가 (mybatis와 db툴에서 실행한게) 다르게 나올 수 있나요?


안녕하세요. 저번에도 다른 질문을 남겼는데 오늘 또 오게되었네요.

저도 열심히 해서 다른분들께 도움을 드렸으면 좋겠습니다.

자바 어플리케이션 제작중이고 마이바티스에서 다음 쿼리를 날렸습니다.

SELECT *
        FROM village_professor p INNER JOIN
            (
            SELECT professorsubject_idx, professor_idx, professor_name, professorsubject_year, professorsubject_term, professorsubject_name
            FROM
                (
                SELECT a.*,
                    (CASE @vProfessorIdx WHEN a.professor_idx THEN @rownum:=@rownum+1 ELSE @rownum:=1 END ) rnum,
                    (@vProfessorIdx:=a.professor_idx) vProfessorIdx
                FROM village_professorsubject a, (SELECT @vProfessorIdx:='', @rownum:=0 FROM DUAL) b
                ORDER BY a.professor_idx, a.professorsubject_year DESC, a.professorsubject_term DESC
                )c
            WHERE rnum=1
            ) s
            ON p.professor_idx = s.professor_idx
        WHERE p.professor_manage=0
        ORDER BY p.professor_idx


결과 select문이 성공적으로 수행되었습니다.

이후 위의 테이블 두개 중  village_professorsubject 테이블에

insert문으로 레코드를 하나 넣고 바로 다시 위의 select문을 수행했는데 

insert한 결과문이 나오지 않습니다.(insert하기 이전 결과가 나옵니다)

근데 db툴(sqlyog)에서 위 select문을 수행하면 insert한 결과가 잘 반영되어 나오구요.

그리고 자바어플리케이션을 다시 시작했을때도 insert결과가 잘 반영됩니다.


결론적으로 db툴로 select쿼리를 날리거나 어플리케이션을 재시작해야 insert된 결과가 잘 나옵니다.

아시는 선생님 꼭 답변 부탁드립니다. 감사합니다.

0
0
  • 답변 6

  • 도각도각
    3k
    2016-02-10 22:03:15

    커밋을 하지 않으신거 아닌가요?

    1
  • 박광용
    235
    2016-02-10 22:06:21

    아마 제 생각에는 저 쿼리가 날리기전에 프로그램에서update,delete를 하였을것입니다.


    그래서 결과가 다르게 나오는걸거에요.. 트렌잭션때문에 그렇게 파악되는것일테니 차근차근 프로그램 디버그 해보세요 ^^

    1
  • jinviolet
    33
    2016-02-11 00:40:47

    오토커밋 되고 있어서 커밋은 되고 있는것 같아요.

    db툴에서 조회할때는 분명 insert확인이 되는데

    이상하게 같은 어플리케이션에서 메서드로 조회를 했을때는 최신데이터가 반영이 안되네요.

    어플리케이션 재시작하면 반영이 되구요 ㅠㅠ


    1
  • 제타건담
    6k
    2016-02-11 11:29:37

    어플리케이션에서 종료되는 시점에 커밋이 되어서 DB 툴에서 그럴껍니다..

    insert 작업뒤에 명시적으로 커밋 메소드 호출해주세요..

    그리고 트랜잭션..에 대한 공부를 좀 하셨음 좋겠군요..

    1
  • siva6
    4k
    2016-02-11 11:46:17

    위에 분들이 말씀하신 트랜젝션 문제가 아니라면,

    mybatis나 어플리케이션단에 select 관련 캐시가 있는지 확인해 보시기 바랍니다.

    1
  • jinviolet
    33
    2016-02-11 18:20:34

    해결했습니다. 감사합니다.

    select 하기전에 dao단에서 clearCache() 메서드 한번 호출하니깐 제대로 붙네요

    이걸로 사흘정도 고생했습니다.

    답변주신분들께 감사드립니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.