복붙노트

[SQL] 여러 행의 마지막 삽입 된 ID를 가져

SQL

여러 행의 마지막 삽입 된 ID를 가져

자동 증가 PK가있는 테이블에 데이터를 삽입 할 때, 나는 또 다른 문에 사용하는 키를 얻을 필요가있다. 많은 질문에 보여줄 수 있도록이에 mysql_insert_id를 사용하여 PHP에서 수행 할 수있다 ().

나는 한 번에 두 개 이상의 행을 삽입 할 수 있도록 그러나, 나는 함께 내 삽입을 그룹화하고 있습니다. 아마 내가 잘못되면 알려 주시기 바랍니다 몇 가지 성능 문제가있을 것이라고 짐작으로 내가 이런 짓을. 나는 그러나 알고 나는 모든 삽입 된 행에 대한 ID를 필요로 할 때 어쨌든, 지금까지,에 mysql_insert_id ()는 마지막 ID를 반환합니다.

나는 내가 할 수있는이 경우 같아요

나는 내가 가장 일반적이고 바람직 방법이 무엇인지에 궁금, 확인이 고전적인 문제가 될 수 있어야입니다.

해결법

  1. ==============================

    1.() LAST_INSERT_ID를 호출하면 당신에게 마지막 배치에 삽입 된 첫 번째 행의 ID를 제공합니다. 삽입 된 모든 다른 사람은 순차적으로 보장됩니다.

    () LAST_INSERT_ID를 호출하면 당신에게 마지막 배치에 삽입 된 첫 번째 행의 ID를 제공합니다. 삽입 된 모든 다른 사람은 순차적으로 보장됩니다.

    당신은 매우 이상한 일을하지 않는 한, 이것은 당신이 충분히 쉽게 각 행의 ID를 계산할 수 있습니다.

    실제로 동작은 InnoDB의 자동 증가 모드 매개 변수의 설정에 따라 5.1에서 변화한다; 이 문제가되지해야한다. 당신이 기본값에서 변경하지 않는 한, 당신은 예상 된 동작을 볼 수 있습니다.

    그런 당신이 ON DUPLICATE KEY UPDATE 또는 INSERT가 무시 할 것처럼 - 이것은 당신이 기대 유용하지 않습니다 일을하지 않습니다 가끔 경우가 있습니다. 이 경우, 각 행의 ID를 해결하기 위해 다른 무언가를해야합니다.

    그러나 일반 바닐라 INSERT 배치를 위해, 자동 INC 컬럼에 지정된 값이없는, 그것은 간단합니다.

    자동 증가가 이노에서 처리하는 방법에 대한 자세한 설명은 여기

  2. ==============================

    2.나는 저라면 내가 사용하는 거라고 접근 방법의 몇 가지 있습니다 :

    나는 저라면 내가 사용하는 거라고 접근 방법의 몇 가지 있습니다 :

    첫째, CURRENT_TIMESTAMP 방법의 기본으로 CreateDate 필드가있다. 당신은 본질적으로 날짜를 얻을 수 CURRENT_TIMESTAMP를 선택하고 삽입을 실행 한 다음 테이블 CreateDate> $ mytimestamp에서 ID를 선택합니다.

    둘째, 당신은 삽입 후 로그인하고 작은 감사 테이블에 새 ID를 넣어 테이블에 트리거를 만들 수 있습니다. 하지만, 그 ID를 확인하기 전에 테이블을 자릅니다. 테이블 행 수백만에 수백만의 경우, 나는이 방법을 사용합니다.

  3. from https://stackoverflow.com/questions/1285231/retrieving-the-last-inserted-ids-for-multiple-rows by cc-by-sa and MIT license