2011-01-12 2 views
1

여러 행이있는 삽입의 자동 증가 ID가 mysql_last_insert_id() 값부터 1 씩 증가한다고 가정하는 것이 안전합니까? 이 여러 삽입 사이에 동시 삽입 (다른 사용자 세션에서)이있을 수 있습니까? 이 예 tbl_name에서여러 행이있는 삽입의 ID

는 자동 증가 필드 id를 요구했다 : 값이 행의 'ID'한 correponding 씩 증가 항상 포함

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); 

$nbAffectedRows = mysql_affected_rows(); 
$idFirstRowInserted = mysql_last_insert_id(); 

$arrayId = array(); 
if($nbAffectedRows > 0){ 
    for($i = 0; $i <= $nbAffectedRows; $i++){ 
     $arrayId[] = $idFirstRowInserted + $i; 
    } 
} 

$arrayId 삽입?

+1

MySQL이 1 또는 다른 숫자로 증가 시킬지 여부를 지정하는 auto_increment_increment를 확인해야합니다. 'show variables like auto_increment_increment'; ' –

+0

감사합니다. 나는 그것을 검사했고 그 값은 1 (deault 값)이었다. – Darm

답변

1

거래 내에서 INSERT을 랩핑한다고 가정하는 것이 안전 할 것입니다. 부작용으로 쿼리가 더 빨리 실행됩니다.

+0

대기열을 생성 하시겠습니까? – Darm

+1

InnoDB로 auto_inc에 대해 더 많은 것을 읽었습니다. 현재의 SQL 문 끝 부분에 대해'keep_ AUTO_INC lock'이 나타납니다. http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html 그러므로 귀하의 질문은 스스로 안전해야합니다 –

+0

시간 내 주셔서 감사합니다. German Rumm. 불행히도 MyISAM 테이블을 사용하고 있습니다. – Darm

관련 문제