MariaDB
: ver 10.6INSERT
된 AUTO_INCREMENT
속성으로 자동생성된 값을 return 한다.초기값
: 0SELECT LAST_INSERT_ID();
+------------------+
| last_insert_id() |
+------------------+
| 0 |
+------------------+
JDBC
≠ 프롬프트
프롬프트
에서 값이 3으로 return 되었다고해서 JDBC
의 값이 동일하게 3으로 나오지 않는다.프롬프트
≠ 프롬프트
프롬프트1
값이 5이라도 프롬프트2
에서 값이 5로 리턴되지 않는다.TRUNCATE
는 테이블을 DROP 한 후 재생성한다.AUTO_INCREMENT
값은 리셋된다.AUTO_INCREMENT
값은 리셋되더라도 LAST_INSERT_ID()
값은 리셋되지 않는다.TRUNCATE TABLE 테이블명;
DELETE
: 레코드 단위 row 삭제 ➡ AUTO_INCREMENT
유지TRUNCATE
: 테이블 삭제 후 재생성 ➡ AUTO_INCREMENT
초기화seq
: 게시글 번호grp
: 게시글 그룹grps
: 게시글 그룹 내 순서grpl
: 게시글 그룹 내 깊이CREATE TABLE board1 (
seq INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
grp INT NOT NULL,
grps INT NOT NULL,
grpl INT NOT NULL,
subject VARCHAR(150) NOT NULL,
writer VARCHAR(12) NOT NULL,
password VARCHAR(12) NOT NULL,
content VARCHAR(2000),
wdate DATETIME NOT NULL
);
seq
: 자동증가grp
: seq의 값과 동일grps
: 최상위 글의 그룹 내 순서는 0grpl
: 최상위 글의 그룹 내 깊이는 0INSERT INTO rep_board1
VALUES (0, last_insert_id()+1, 0, 0, '제목', '작성자', '1234', '내용', now());
최초 실행시 주의점에서 봤듯, LAST_INSERT_ID()
의 값은 0으로 초기화된다.
따라서 사용
에서 본 최상위 게시글 작성시 Query
를 별다른 처리 없이 맨 처음 사용하면 grp
의 값이 1로 나오게 된다.
이때, LAST_INSERT_ID()
안에 초기값을 입력해주면 된다.
-- 최초 실행시
SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 0 |
+------------------+
-- 초기값 3 입력시
SELECT LAST_INSERT_ID(3);
+-------------------+
| LAST_INSERT_ID(3) |
+-------------------+
| 3 |
+-------------------+
-- 다시 사용하면?
SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 3 |
+------------------+
MAX를 사용해 grp
값을 먼저 가져오는 방법도 있다.
SELECT MAX(seq)+1 grp
FROM board1;