함수의 이해는 sitelink1 를 참고하면 된다.

연관하여 다음 seq 를 조회하고자 할땐 sitelink2 문서를 참고하면 된다.

 

프로그램에서 SELECT LAST_INSERT_ID() 함수 쿼리를 이용할시 유의할 점은 동일한 connection 으로만 사용해야 한다는 것이다.

가령 insert 를 위해 transaction connection 을 open 하여 insert 수행후에

동일한 connection 에 대해 SELECT LAST_INSERT_ID() 를 실행하면 방금 삽입한 row 의 index 값을 취할 수 있게 되는 것이다.

하지만 해당 connection 을 close 하고 새로운 connection 을 open 하여 SELECT LAST_INSERT_ID() 함수를 실행하게 되면 무조건 0 을 반환하게 된다.

 

java의 예시는 다음과 같다.

 

    public int add(String serialNum, String dateTime, String seqMall, String seqUser) throws Exception {

 

        int seqOrder = -1;

        

        StringBuffer querySb = new StringBuffer();

        querySb.append("INSERT INTO jbg_order (");

        querySb.append("serial_num,");

        querySb.append("date_time,");

        querySb.append("seq_jbgmall,");

        querySb.append("seq_user");

        querySb.append(") values (");

        querySb.append("'"+serialNum + "'");

        querySb.append(", "+ dateTime);

        querySb.append(", "+ seqMall);

        querySb.append(", "+ seqUser);

        querySb.append(")");

        log.debug("LOCALDB-QUERY------------------------------------------------------------------------------");

        log.debug(querySb);

 

        LocalDBConnection conn = null;

        try {

            conn = new LocalDBConnection();

            conn.txOpen();

            conn.txExecuteUpdate(querySb.toString());

 

            String getLastIdQuery = "SELECT LAST_INSERT_ID() id";

            ResultSet rset = conn.executeQuery(getLastIdQuery);

            if (rset != null) {

                if (rset.next()) {

                     seqOrder = rset.getInt("id");

                }

            }

 

            conn.txCommit();

        } catch (SQLException sqle) {

            log.error("* 아이고!! ㅜ.ㅜ 데이터베이스 업데이트 에러 발생");

            log.error(sqle.getMessage());

            log.debug(ExceptionUtil.getStackTraceString(sqle.getStackTrace()));

            sqle.printStackTrace();

            throw sqle;

        } catch (Exception e) {

            log.error("* 데이터베이스 업데이트 에러 발생");

            log.error(e.getMessage());

            log.debug(ExceptionUtil.getStackTraceString(e.getStackTrace()));

            e.printStackTrace();

            conn.txRollBack();

            throw e;

        } finally {

            conn.close();            

        }

 

        return seqOrder;

    }