복붙노트

MySQL에서 마지막으로 업데이트 된 행의 ID를 얻는 방법?

PHP

MySQL에서 마지막으로 업데이트 된 행의 ID를 얻는 방법?

PHP를 사용하여 MySQL에서 마지막 업데이트 된 행의 ID를 얻으려면 어떻게해야합니까?

해결법

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

    1.나는이 문제에 대한 해답을 찾았다. :)

    나는이 문제에 대한 해답을 찾았다. :)

    SET @update_id := 0;
    UPDATE some_table SET column_name = 'value', id = (SELECT @update_id := id)
    WHERE some_other_column = 'blah' LIMIT 1; 
    SELECT @update_id;
    

    aefxx로 편집

    이 기술은 업데이트 문에 의해 영향을받는 모든 행의 ID를 검색하도록 추가로 확장 될 수 있습니다.

    SET @uids := null;
    UPDATE footable
       SET foo = 'bar'
     WHERE fooid > 5
       AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) );
    SELECT @uids;
    

    모든 ID가 쉼표로 연결된 문자열이 반환됩니다.

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

    2.흠, 나는 답변 중에서 가장 쉬운 해결책을 찾지 못한다는 사실에 놀랐습니다.

    흠, 나는 답변 중에서 가장 쉬운 해결책을 찾지 못한다는 사실에 놀랐습니다.

    item_id가 항목 테이블의 정수 ID 열이고 행을 다음 문으로 업데이트한다고 가정합니다.

    UPDATE items
    SET qwe = 'qwe'
    WHERE asd = 'asd';
    

    그런 다음 명령문 바로 다음에 영향을받는 최신 행을 알기 위해 명령문을 다음과 같이 약간 업데이트해야합니다.

    UPDATE items
    SET qwe = 'qwe',
        item_id=LAST_INSERT_ID(item_id)
    WHERE asd = 'asd';
    SELECT LAST_INSERT_ID();
    

    실제로 변경된 행만 업데이트해야하는 경우 행에서 데이터가 변경 될 경우 LAST_INSERT_ID 확인을 통해 item_id의 조건부 업데이트를 추가해야합니다.

  3. ==============================

    3.이것은 Salman A의 대답과 같은 방법이지만 실제로 여기에 필요한 코드가 있습니다.

    이것은 Salman A의 대답과 같은 방법이지만 실제로 여기에 필요한 코드가 있습니다.

    먼저 행이 수정 될 때마다 자동으로 추적 할 수 있도록 표를 편집하십시오. 행이 처음 삽입되었을 때만 알고 싶으면 마지막 행을 제거하십시오.

    ALTER TABLE mytable
    ADD lastmodified TIMESTAMP 
        DEFAULT CURRENT_TIMESTAMP 
        ON UPDATE CURRENT_TIMESTAMP;
    

    그런 다음 마지막으로 업데이트 된 행을 찾으려면이 코드를 사용할 수 있습니다.

    SELECT id FROM mytable ORDER BY lastmodified DESC LIMIT 1;
    

    이 코드는 모두 MySQL 대 PostgreSQL에서 해제되었습니다 : 테이블과 MySQL 매뉴얼에 'Last Modified Time'컬럼 추가 : 행 정렬. 방금 조립 했어.

  4. ==============================

    4.이것은 공식적으로 간단하지만 현저하게 반 직관적입니다. 당신이하고있는 경우 :

    이것은 공식적으로 간단하지만 현저하게 반 직관적입니다. 당신이하고있는 경우 :

    사용자 업데이트 설정 status = 'processing'여기서 status = 'pending' 한도 1

    그것을 다음과 같이 변경하십시오.

    사용자 업데이트 설정 status = 'processing'여기서 status = 'pending' 및 last_insert_id (user_id) 한도 1

    where 절에 last_insert_id (user_id)를 추가하면 MySQL은 내부 변수를 발견 된 행의 ID로 설정합니다. 이와 같이 last_insert_id (expr)에 값을 전달하면 해당 값을 반환합니다. 여기서와 같은 ID는 항상 양의 정수이므로 항상 where 절을 방해하지 않고 항상 true로 평가됩니다. 일부 행이 실제로 발견 된 경우에만 작동하므로 영향을받은 행을 확인하는 것을 잊지 마십시오. 그런 다음 여러 가지 방법으로 ID를 얻을 수 있습니다.

    MySQL last_insert_id ()

    MySQL mysql_insert_id ()

    PHP mysqli_insert_id ()

    함께 모아서:

    $affected_rows = DB::getAffectedRows("
        update users set status = 'processing' 
        where status = 'pending' and last_insert_id(user_id) 
        limit 1"
    );
    if ($affected_rows) {
        $user_id = DB::getInsertId();
    }
    

    (참고로 DB 클래스가 있습니다.)

  5. ==============================

    5.검색어 :

    검색어 :

    $sqlQuery = "UPDATE 
                update_table 
            SET 
                set_name = 'value' 
            WHERE 
                where_name = 'name'
            LIMIT 1;";
    

    PHP 함수 :

    function updateAndGetId($sqlQuery)
    {
        mysql_query(str_replace("SET", "SET id = LAST_INSERT_ID(id),", $sqlQuery));
        return mysql_insert_id();
    }
    

    그것은 나를 위해 일합니다;)

  6. ==============================

    6.이봐, 방금 그런 트릭이 필요했다. 다른 방법으로 해결 했어. 아마 너를 위해 일할거야. 이것은 확장 가능한 솔루션이 아니며 큰 데이터 세트에는 매우 좋지 않습니다.

    이봐, 방금 그런 트릭이 필요했다. 다른 방법으로 해결 했어. 아마 너를 위해 일할거야. 이것은 확장 가능한 솔루션이 아니며 큰 데이터 세트에는 매우 좋지 않습니다.

    쿼리를 두 부분으로 나눕니다.

    먼저 업데이트 할 행의 ID를 선택하고 임시 테이블에 저장하십시오.

    둘째, temp_table의 id로 변경된 update 문의 조건을 사용하여 원래 업데이트를 수행합니다.

    그리고 동시성을 보장하기 위해이 두 단계 전에 테이블을 잠근 다음 끝에 잠금을 해제해야합니다.

    다시 말하지만, 이것은 나를 위해, 제한 1로 끝나는 쿼리를 위해, 그래서 나는 심지어 임시 테이블을 사용하지 않고 대신 단순히 첫 번째 선택의 결과를 저장하는 변수를 사용합니다.

    나는 항상 하나의 행만 업데이트 할 것이고 코드는 간단하다는 것을 알기 때문에이 방법을 선호한다.

  7. ==============================

    7.마지막 업데이트 된 행의 ID는 'updateQuery'에서 해당 행을 찾아서 업데이트하는 데 사용하는 것과 동일한 ID입니다. 따라서 원하는 ID를 저장 (전화)하십시오.

    마지막 업데이트 된 행의 ID는 'updateQuery'에서 해당 행을 찾아서 업데이트하는 데 사용하는 것과 동일한 ID입니다. 따라서 원하는 ID를 저장 (전화)하십시오.

    last_insert_id ()는 AUTO_INCREMENT에 의존하지만 마지막으로 업데이트 된 ID는 아닙니다.

  8. ==============================

    8.위의 허용 된 답변 더보기 궁금해하는 사람들을 위해 : = & =

    위의 허용 된 답변 더보기 궁금해하는 사람들을 위해 : = & =

    : =와 =의 중요한 차이점은 : =은 어디에서나 변수 할당 연산자로 작동하지만 SET 문에서는 그런 식으로 작동하고 다른 곳에서는 비교 연산자입니다.

    그래서 SELECT @var = 1 + 1; @var를 변경하지 않고 부울 값 (@var의 현재 값에 따라 1 또는 0)을 반환하고 SELECT @ var : = 1 + 1; @var를 2로 변경하고 2를 반환합니다. [출처]

  9. ==============================

    9.삽입 만하고 있고 동일한 세션에서 하나를 원할 경우, peirix의 대답에 따라하십시오. 수정을 수행하는 경우 가장 최근에 갱신 된 항목을 저장하기 위해 데이터베이스 스키마를 수정해야합니다.

    삽입 만하고 있고 동일한 세션에서 하나를 원할 경우, peirix의 대답에 따라하십시오. 수정을 수행하는 경우 가장 최근에 갱신 된 항목을 저장하기 위해 데이터베이스 스키마를 수정해야합니다.

    이전에 수정 한 ID를 다른 세션에서 가져오고 싶다면 (즉, 현재 실행중인 PHP 코드에 의해 수행 된 것이 아니라 다른 요청에 대한 응답으로 완료된 ID), 다음을 추가 할 수 있습니다. TIMESTAMP 열을 last_modified라는 테이블에 추가하고 (http://dev.mysql.com/doc/refman/5.1/en/datetime.html 참조), 업데이트 할 때 last_modified = CURRENT_TIME을 설정하십시오.

    이것을 설정하면 다음과 같은 쿼리를 사용할 수 있습니다.   SELECT id FROM 테이블 ORDER BY last_modified DESC LIMIT 1; 가장 최근에 수정 된 행을 가져옵니다.

  10. ==============================

    10.

    SET @uids := "";
    UPDATE myf___ingtable
       SET id = id
       WHERE id < 5
      AND ( SELECT @uids := CONCAT_WS(',', CAST(id AS CHAR CHARACTER SET utf8), @uids) );
    SELECT @uids;
    

    나는 ID를 왜 만들어야 했는가? (또는 왜 그런지) ... 아니면 @uids 내용을 얻을 수 없다. Btw Pomyk 대답에 대한 많은 감사!

  11. ==============================

    11.내 솔루션은, 먼저 선택 명령과 "id"(@uids)를 결정한 후이 ID를 @uids로 업데이트합니다.

    내 솔루션은, 먼저 선택 명령과 "id"(@uids)를 결정한 후이 ID를 @uids로 업데이트합니다.

    SET @uids := (SELECT id FROM table WHERE some = 0 LIMIT 1);
    UPDATE table SET col = 1 WHERE id = @uids;SELECT @uids;
    

    그것은 내 프로젝트에서 일했습니다.

  12. ==============================

    12.긴 MySQL 코드가 필요 없습니다. PHP에서 쿼리는 다음과 같이 보일 것입니다 :

    긴 MySQL 코드가 필요 없습니다. PHP에서 쿼리는 다음과 같이 보일 것입니다 :

    $updateQuery = mysql_query("UPDATE table_name SET row='value' WHERE id='$id'") or die ('Error');
    $lastUpdatedId = mysql_insert_id();
    
  13. from https://stackoverflow.com/questions/1388025/how-to-get-id-of-the-last-updated-row-in-mysql by cc-by-sa and MIT license