데이터를 추가하는 경우에 다음과 같은 경우가 많이 있다.
“하나의 글을 작성하는데 다수의 첨부파일을 작성할 수 있는 경우”
위의 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값이 나온다.
단, 당연하겠지만 같은 커넥션 안에서만 정상적인 결과가 나온다.