2010-05-21 2 views
4
내가 사용하는 다중 삽입하여 테이블

방법 다중 삽입을하고 IDS

(id PK autoincrement, val) 

로 일부 데이터를 삽입 할

을 구하는

INSERT INTO tab (val) VALUES (1), (2), (3) 

는 마지막으로 삽입 된 ID의 테이블을 얻을 수 있습니까?

(n, n + 1, n + 2)이 모든 형식으로되어 있는지 확실하지 않으므로 묻습니다.

mysql inodb를 사용합니다. mysql docs에서

+1

복제본 http://stackoverflow.com/questions/1679295/php-mysql-insert-id-on-multiple-rows – mdma

+0

@mdma : 불행히도이 질문에 대한 답변은 정확하지 않습니다. – webbiedave

답변

2

:

당신이 하나의 INSERT 문을 사용하여 여러 행을 삽입하는 경우, LAST_INSERT_ID()는 첫번째 삽입 된 행 만 생성 된 값 을 반환합니다. 그 이유는 다른 서버에 대해 동일한 INSERT 문을 쉽게 재현 할 수있게하기 위해서입니다.

+0

ok,하지만 각각의 다음에 1 씩 증가합니다. 또는 2 개의 고유 한 삽입 기호로 된 인터리브 ID가 있는지 확인합니다. – liysd

+1

나는 항상 연속적임을 99 % 확신합니다. auto_increment 값을 더 낮게 설정하고'id' 열에 "구멍"이있는 경우에만 간섭을 일으킬 수 있습니다. – Josh

+0

마지막 삽입 ID를 검색하는 대체 방법에 의존하지 마십시오 (항상 레이스가 있음) . 각 ID가 필요하면 한 번에 하나씩 삽입하십시오. – webbiedave

1

Here's 누군가가 mysql 포럼에서 같은 질문을하고 있지만 정말로 신뢰할만한 대답은 없습니다. 그들은 안전하기 위해 테이블을 먼저 잠급니다. 그렇다면 순차적 인 ID를 셀 수 있습니다. '

내 조언은 이것이다 :

당신이 많은 행을 삽입하고 있으며, 다른 스레드를 차단 마음 테이블을 잠글의 삽입을 수행 한 후 잠금을 해제하지 마십시오. 테이블이 잠겨 있기 때문에 삽입 된 ID를 순차적으로 (또는 자동 증가 설정이 무엇이든) 계산할 수 있습니다.

삽입 수가 적거나 다른 스레드를 차단하고 싶지 않으면 한 번에 하나씩 실행하고 각각 후에 last_insert_id()를 호출하십시오.

+0

먼저해야합니다 자동 증가 - 증가 및 자동 증가 - 오프셋의 설정을 확인하여 증가 룰을 변경합니다. – webbiedave

+0

예, 물론입니다. 이 질문은 칼럼 정의가 1 씩 증가하는 것을 의미한다고 암시하는 것처럼 보였다. – grossvogel

관련 문제