함수의 이해는 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;

    }

 

 

번호 제목 글쓴이 날짜 조회 수
40 [Copilot] 2개 이상의 컬럼을 unique key 로 묶는 방법 황제낙엽 2024.07.12 371
» 마지막 insert 한 row 의 seq를 취하는 함수 SELECT LAST_INSERT_ID() 황제낙엽 2024.06.05 151
38 (Bard) mysql 에서 auto_increment 인 컬럼의 다음 시퀀스를 조회하는 쿼리 - LAST_INSERT_ID() 황제낙엽 2023.08.25 97
37 HeidiSQL 에서 사용자 관리 황제낙엽 2023.06.23 108
36 SELECT 에서 대소문자 구별 방법 황제낙엽 2023.03.28 97
35 [HeidiSQL] Library libmariadb.dll could not be loaded. Please select a different one. file 황제낙엽 2021.09.10 1722
34 group by 황제낙엽 2021.01.13 97
33 order by 황제낙엽 2020.11.04 95
32 문서 내부에 검색어가 포함되었는지를 조회 황제낙엽 2020.07.23 220
31 [phpMyAdmin] 설치 및 보안설정 (How to Install and Secure phpMyAdmin on localhost for Windows) file 황제낙엽 2019.07.19 257
30 DATETIME 컬럼에 날짜 입력 예제 (java코드) 황제낙엽 2019.05.29 471
29 MySQL Database Migration Wizard 황제낙엽 2019.04.05 187
28 MySQL 워크벤치(Workbench) 황제낙엽 2019.04.05 165
27 MySQL을 로컬이 아닌 외부에서 접속하기 위한 확인 사항 황제낙엽 2018.11.30 883
26 root 암호 분실시 초기화 방법 황제낙엽 2017.04.06 2868
25 MySQL UPDATE의 활용 file 황제낙엽 2017.07.08 185
24 우분투, MariaDB, phpmyadmin 설치하기 file 황제낙엽 2017.01.31 400
23 MSI로 설치 file 황제낙엽 2017.01.26 179
22 ZIP으로 설치 file 황제낙엽 2017.01.26 182
21 세상에 공짜는 없다(MySQL 의 대안) file 황제낙엽 2016.05.24 237