개발 창고/Database
[SQLite] How to get the last inserted ID
로이제로
2023. 12. 12. 22:00
반응형
0. 미리보기
SELECT LAST_INSERT_ROWID();
TRANSACTION 처리를 위해 ID에 의미를 부여하지 않는 경우에는 Sequence를 ID로서의 역할인 중복방지가 가능합니다.
만약 아래와 같은 메모를 관리하기 위한 MEMO 테이블이 있다고 가정하고 SEQ가 해당 테이블의 PK인 경우
SEQTITLECONTENT
SEQ | TITLE | CONTENT |
1 | 로이팩토리 | 블로그 작성중입니다. |
2 | 워드프레스 | 블로그 이용중입니다. |
1. 테이블 생성
CREATE TABLE MEMO (
SEQ INTEGER PRIMARY KEY AUTOINCREMENT
, TITLE TEXT
, CONTENT TEXT
)
SEQ : 메모 일련번호 (1, 2, 3, 순으로 자동 증가)
TITLE : 메모 제목
CONTENT : 메모 내용
2. 임시 데이터 추가
INSERT INTO MEMO (TITLE, CONTENT) VALUES ('로이팩토리', '블로그 작성중입니다.')
INSERT INTO MEMO (TITLE, CONTENT) VALUES ('워드프레스', '블로그 이용중입니다.')
여기서 메모의 SEQ는 직접 입력해 줘도 되지만, AUTOINCREMENT를 테이블 생성 시에 적용해 두었기 때문에 따로 추가하지 않아도 마지막 "순번 + 1" 기준으로 입력되게 됩니다.
위에서 처럼 INSERT에서 별도로 SEQ를 입력하지 않아도, QUERY가 실행된 순서대로 SEQ가 입력되었음을 확인할 수 있습니다.
SQLite 기준으로 SEQ를 직접 입력해 줘도 중복이 AUTOINCREMENT 된 SEQ와 중복이 일어나지 않지만 웬만하면 권장하지는 않습니다.
3. 마지막 입력된 SEQ 가져오기
내용이 좀 길어졌지만, 이 글에서 가장 중요하게 보는 부분은 이 부분입니다. 이게 왜 필요할까요?
만약 메모를 입력하고 메모와 연관된 이미지 목록 또는 메모를 볼 수 있는 사람 목록 등 (MASTER - DETAIL로 이루어진 테이블)이 필요하다고 가정하고, 이 입력이 한 개의 트랜잭션에서 이루어져야 한다면, INSERT 되는 시점에 SEQ를 받아서 바로 이미지 목록을 등록하거나 사용자 권한을 추가해주어야 합니다.
SELECT LAST_INSERT_ROWID();
반응형