wilson's story

[펌] [MySQL] LAST_INSERT_ID() - 가장 최근의Auto Increment값을 가져오기 본문

DB/mysql

[펌] [MySQL] LAST_INSERT_ID() - 가장 최근의Auto Increment값을 가져오기

wilson 2008. 2. 19. 16:42
반응형

데이터를 추가하는 경우에 다음과 같은 경우가 많이 있다.

"하나의 글을 작성하는데 다수의 첨부파일을 작성할 수 있는 경우"
사용자 삽입 이미지
사용자 삽입 이미지

위의 ERD로 스크립트를 생성해 보면 다음과 같을 것이다.

CREATE TABLE POST (
  POST_IDX
int(11) AUTO_INCREMENT,
  SUBJECT varchar
(2000),
  NAME varchar
(200),
  CONTENT text
,
  WRITTEN datetime
,
  PRIMARY KEY
(POST_IDX)
)
 
CREATE TABLE ATTACHMENT
(
  ATTACH_IDX
int(11) AUTO_INCREMENT,
  POST_IDX
int(11),
  FILE_NAME varchar
(200),
  FILE_PATH varchar
(2000),
  UPLOADED datetime
,
  PRIMARY KEY
(ATTACH_IDX ),
  FOREIGN KEY POST_IDX REFERENCES POST
(POST_IDX)
)


글이 작성된 후 저장될때 POST테이블에 하나의 값을 추가한후, 다수의 ATTACHMENT를 추가하여야 할것이다.

하지만 어떻게 정확한 POST_IDX를 알아올 수 있는가?

POST를 저장할때 POST_IDX는 자동증가 인덱스를 가지고 있기 때문에 어떤 값을 부여받게 될지 알 수 없다.

다음과 같은 방법으로 처리할 수 있다.

INSERT INTO POST (
  SUBJECT
, NAME, CONTENT, WRITTEN
) VALUES (
 
"제목", "이름", "글내용", NOW()
);
 
INSERT INTO ATTACHMENT
(
  POST_IDX
, FILE_NAME, FILE_PATH, UPLOADED
) VALUES (
  LAST_INSERT_ID
(), "file.jpg", "/tmp/file.jpg", NOW()
);


위와 같이 LAST_INSERT_ID()를 사용하면 가장 최근에 INSERT시에 입력된 INCREMENT ID값을 가져올 수 있다.

중간에 다른 사용자에 의해 글이 추가되더라도 내가 작성할때 부여된 INCREMENT값이 나온다.

단, 당연하겠지만 같은 커넥션 안에서만 정상적인 결과가 나온다.

http://theeye.pe.kr/trackback/170


반응형