개발 창고/Database
[SQLite] 마지막으로 입력 된 ID 가져오는 방법
로이제로
2023. 7. 28. 22:00
반응형
0. 미리보기
SELECT LAST_INSERT_ROWID();
TRANSACTION 처리를 위해 ID에 의미를 부여하지 않는 경우에는 Sequence를 ID로서의 역할인 중복방지가 가능합니다.
만약 아래와 같은 메모를 관리하기 위한 MEMO 테이블이 있다고 가정하고 SEQ가 해당 테이블의 PK인 경우
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 ('워드프레스', '블로그 이용중입니다.')
위에서 처럼 INSERT에서 별도로 SEQ를 입력하지 않아도, QUERY가 실행된 순서대로 SEQ가 입력되었음을 확인 할 수 있습니다.
SQLite 기준으로 SEQ를 직접 입력해줘도 중복이 AUTOINCREMENT된 SEQ와 중복이 일어나지 않지만 웬만하면 권장 하지는 않습니다.
3. 마지막 입력된 SEQ 가져오기
내용이 좀 길어졌지만, 이 글에서 가장 중요하게 보는 부분은 이 부분입니다. 이게 왜 필요할까요?
만약 메모를 입력하고 메모와 연관된 이미지 목록 또는 메모를 볼 수 있는 사람 목록 등 (MASTER - DETAIL로 이루어진 테이블)이 필요하다고 가정하고, 이 입력이 한 개의 트랜잭션에서 이루어 져야 한다면, INSERT 되는 시점에 SEQ를 받아서 바로 이미지 목록을 등록하거나 사용자 권한을 추가해주어야 합니다.
SELECT LAST_INSERT_ROWID();
※ 이 글은 워드프레스에 작성한 글과 동일한 작성자의 동일한 글입니다.
https://royfactory.net/2023/07/05/sqlite-to-get-last-the-last-inserted-id/
반응형