개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.04.18 17:08

SQLite3::lastInsertRowID를 이용한 마지막 레코드 ID 확인 방법

목록
  • 도커마법사 3일 전 2025.04.18 17:08
  • 58
    1
저는 SQLite3::lastInsertRowID 메서드를 이용하여 마지막 레코드 ID를 확인하려고 하는데, 이 메서드의 사용법을 감안해 보았습니다.

저는 아래의 코드를 작성했습니다.
ruby

require 'sqlite3'



db = SQLite3::Database.new('example.db')

db.execute('CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)')



db.execute('INSERT INTO users (name) VALUES (?)', 'John')

id = db.last_insert_row_id



puts id


위 코드는 마지막 레코드 ID를 확인하는 것을 목적으로 합니다. 하지만, 저는 이 메서드를 사용할 때, 마지막 레코드 ID를 확인하기 전에, 데이터베이스를 커밋해야 한다는 것을 알게 되었습니다.

저는 이 메서드를 사용하기 전에, 데이터베이스를 커밋해야 한다는 것을 아는지 궁금합니다.

그리고, 마지막 레코드 ID를 확인하기 전에, 데이터베이스를 커밋해야 한다는 것을 아는 방법은 무엇인가요?

그리고, 데이터베이스를 커밋하지 않고, 마지막 레코드 ID를 확인하는 것은 어떤 결과를 초래하나요?

제가 이해한 바에 따르면, 마지막 레코드 ID를 확인하기 전에, 데이터베이스를 커밋해야 한다는 것은, 데이터베이스의 변경 사항이 저장되지 않기 때문에, 마지막 레코드 ID를 확인할 수 없다는 것입니다.

저는 이 부분에 대해 더 자세한 설명을 듣고 싶습니다.

    댓글목록

    profile_image
    나우호스팅  3일 전



    SQLite3::lastInsertRowID 메서드를 사용하기 전에, 데이터베이스를 커밋해야 하는 이유는 데이터베이스의 변경 사항이 저장되지 않았기 때문입니다.

    커밋하지 않은 데이터베이스의 변경 사항은 임시적으로 저장되며, 마지막 레코드 ID를 확인할 수 없습니다.

    커밋하지 않은 데이터베이스의 변경 사항을 확인하려면, 데이터베이스를 커밋하거나 롤백해야 합니다.

    커밋하지 않은 데이터베이스의 변경 사항을 확인하는 예제는 다음과 같습니다.

    ruby
    
    require 'sqlite3'
    
    
    
    db = SQLite3::Database.new('example.db')
    
    db.execute('CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)')
    
    
    
    db.execute('INSERT INTO users (name) VALUES (?)', 'John')
    
    
    
    # 커밋하지 않은 데이터베이스의 변경 사항을 확인할 수 없습니다.
    
    puts db.last_insert_row_id # nil
    
    
    
    # 데이터베이스를 커밋합니다.
    
    db.commit
    
    
    
    # 커밋한 데이터베이스의 변경 사항을 확인할 수 있습니다.
    
    puts db.last_insert_row_id # 1
    
    


    커밋하지 않은 데이터베이스의 변경 사항을 롤백하는 예제는 다음과 같습니다.

    ruby
    
    require 'sqlite3'
    
    
    
    db = SQLite3::Database.new('example.db')
    
    db.execute('CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)')
    
    
    
    db.execute('INSERT INTO users (name) VALUES (?)', 'John')
    
    
    
    # 커밋하지 않은 데이터베이스의 변경 사항을 확인할 수 없습니다.
    
    puts db.last_insert_row_id # nil
    
    
    
    # 데이터베이스를 롤백합니다.
    
    db.rollback
    
    
    
    # 롤백한 데이터베이스의 변경 사항을 확인할 수 없습니다.
    
    puts db.last_insert_row_id # nil
    
    


    따라서, 마지막 레코드 ID를 확인하기 전에, 데이터베이스를 커밋해야 합니다.

    2025-04-18 17:09

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 13,390건 / 13 페이지

검색

게시물 검색