개발 Q&A

제목 PDO::lastInsertId 테이블 잠금이 필요한가요??
카테고리 DB
글쓴이 카카메론바 작성시각 2017/04/11 12:02:11
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 10190   RSS

안녕하세요^^

따듯한 봄이 왔네요~ 환절기 감기 조심하세요~

----

MySQL을 대상으로 하는 PDO::lastInsertId() 이 메서드를 수행할때...

테이블 락을 걸어야 하나요??

제가 생각하기엔 락을 걸필요없다고 느껴지는데;;

100% 확신하지 못해 이렇게 질문을 드려봅니다.

제가 현재 수정중에 있는 레거시코드에 가령 아래와 같은 코드들이 좀 있습니다.

>> LOCK TABLES 주소록 WRITE;

>> INSERT address ....

$idx = $dbh->lastInsertId();

>> UNLOCK TABLES;

대상 테이블에는 idx는 primary key 에 auto_increment 가 설정되어 있습니다.

 

테이블 락을 꼭 걸어야 하는 걸까요??

 다음글 'xxx..xls의 형식이 파일 확장명에서 지정한 형식... (4)
 이전글 특정 url로 변경되도록 처리 하고싶습니다. (1)

댓글

kaido / 2017/04/11 12:17:07 / 추천 0

락을 거는 이유만 아시면 해답이 나올것 같습니다.

락을 거는 가장 큰 이유는 교차 데이터 방지를 위해서 입니다.

이 작업이 끝나기 전에는 다른 작업을 받지 않겠다. 라는 의미입니다.

 

insertId 의 경우에는 락을 걸어야 할 수도 있긴 합니다.

이유는 삽입된 테이블 레코드의 가장 마지막 번호를 알기 위해서 인데,

2개가 빠르게 삽입되어버려서 1번째 id 마저 2번째 id 로 나올 수도 있기 때문입니다만... 보통 이런 경우는 보기 드물긴 합니다.

 

더불어 락이 무조건 좋은건 아닙니다. 당연하게도 테이블 접근을 막기 때문에 해당 테이블에 대한 접근이 느려집니다.

락 걸고 해제 하지 않은 채로  프로세스가 죽어버릴 경우, 좀비가 되어서 테이블 접근을 막아버리는 불상사가 발생 하니, 락은 조심해서 사용 하시는 것이 좋습니다.

 

 

판단은 본인이 하시면 됩니다 ㅎㅎ

 

카카메론바 / 2017/04/11 13:00:26 / 추천 0

답변감사합니다^^

결국 판단이군요 ㅠㅡㅠ