Tag Archives: erd

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

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

“하나의 글을 작성하는데 다수의 첨부파일을 작성할 수 있는 경우”
사용자 삽입 이미지
위의 ERD로 스크립트를 생성해 보면 다음과 같을 것이다.

[code]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)
)[/code]

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

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

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

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

[code]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()
);[/code]

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

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

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