여러 레코드 INSERT 문에 사용되는 MySQL LAST_INSERT_ID()
단일 레코드 삽입을 실행하는 루프가 있는 레코드를 여러 개 삽입하면 반환되는 마지막 삽입 ID가 예상대로 마지막 삽입 ID가 됩니다.하지만 제가 여러 개의 레코드를 삽입하면 다음과 같이 됩니다.
INSERT INTO people (name,age)
VALUES ('William',25), ('Bart',15), ('Mary',12);
위의 세 가지가 표에 삽입된 첫 번째 레코드라고 가정해 보겠습니다.insert 문 이후에 마지막 insert id가 3을 반환할 것으로 예상했는데 1을 반환했습니다.문제의 문에 대한 첫 번째 삽입 ID입니다.
그래서 누가 이것이 정상적인 행동인지 확인해 줄 수 있습니까?LAST_INSERT_ID()
여러 레코드의 컨텍스트에서 INSERT 문을 사용합니다.그래서 코드를 기반으로 할 수 있습니다.
네. 이 행동은.last_insert_id()
는 MySQL 문서에 나와 있습니다.
중요한
단일 문을 사용하여 여러 행을 삽입하는 경우에는 첫 번째로 삽입된 행에 대해서만 생성된 값을 반환합니다.그 이유는 다른 서버에 대해 동일한 문을 쉽게 복제할 수 있도록 하기 위해서입니다.
이 동작은 MySQL의 man 페이지에 언급되어 있습니다.댓글에 있지만 도전을 받지 않아서 예상되는 행동인 것 같습니다.
당신의 테이블에 고유한 자동증분열(ID)이 있고 mysql 자체에서 반품을 요구하지 않는다면 가능하다고 생각합니다.저는 당신에게 DB 요청 3건과 약간의 처리 비용이 더 들 것입니다.다음 단계가 필요합니다.
- 삽입하기 바로 전에 "MAX(ID) 이전"을 확인하십시오.
SELECT MAX(id) AS before_max_id FROM table_name`
다중 INSERT 만들기...값()은 데이터를 쿼리하여 유지합니다.
INSERT INTO table_name (col1, col2) VALUES ("value1-1" , "value1-2"), ("value2-1" , "value2-2"), ("value3-1" , "value3-2"), ON DUPLICATE KEY UPDATE
삽입 후 바로 "After MAX(ID)"를 표시합니다.
SELECT MAX(id) AS after_max_id FROM table_name`
다음을 포함하여 "Before MAX(ID)"와 "After MAX(ID)" 사이의 ID를 가진 레코드를 가져옵니다.
SELECT * FROM table_name WHERE id>$before_max_id AND id<=$after_max_id`
검색된 데이터와 일치하도록 삽입한 데이터를 검사하고 사용자가 삽입하지 않은 레코드를 제거합니다.나머지 레코드에는 사용자 ID가 있습니다.
foreach ($after_collection as $after_item) {
foreach ($input_collection as $input_item) {
if ( $after_item->compare_content($input_item) ) {
$intersection_array[] = $after_item;
}
}
}
이것이 일반인들이 코드의 일부를 가지고 현실 세계에서 그것을 해결하는 방법입니다.자동 증가 덕분에 확인할 수 있는 레코드의 양이 최소화되므로 많은 처리가 필요하지 않습니다.이것은 최종 "복사 & 페이스트" 코드가 아닙니다. 예를 들어, 필요에 따라 compare_content() 함수를 직접 만들어야 합니다.
언급URL : https://stackoverflow.com/questions/4637367/mysql-last-insert-id-used-with-multiple-records-insert-statement
'programing' 카테고리의 다른 글
"/", "\"?를 사용하는 플랫폼 독립 경로 연결 (0) | 2023.07.23 |
---|---|
Windows에서 Cmake (0) | 2023.07.23 |
파이어베이스InstanceIdService가 더 이상 사용되지 않습니다. (0) | 2023.07.23 |
실행 시간 제한에 절전 시간이 포함됩니까? (0) | 2023.07.23 |
phpexcel을 사용하여 셀에서 새 줄을 만드는 방법 (0) | 2023.07.23 |