Web

Как получить ID последней обновленной строки в MySQL

Как получить идентификатор последней обновленной строки в MySQL с помощью PHP?

 

Ответ 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;

Этот метод может быть дополнительно расширен для получения идентификатора каждой строки, затронутой оператором обновления:

SET @uids := null;

UPDATE footable

   SET foo = 'bar'

 WHERE fooid > 5

   AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) );

SELECT @uids;

Это код вернет строку со всеми идентификаторами.

 

Ответ 2

Предположим, что item_id это столбец целочисленного идентификатора в таблице items, и вы обновляете строки с помощью следующего оператора:

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();

Если вам нужно обновить только действительно измененную строку, вам нужно будет добавить условное обновление item_id с помощью LAST_INSERT_ID, который проверяет, будут ли данные изменяться в этой строке.

 

Ответ 3

Действительно это просто, но на удивление нелогично. Если вы поступите следующим образом:

update users set status = 'processing' where status = 'pending'

 

limit 1,

измените этот код на этот:

update users set status = 'processing' where status = 'pending'

 

and last_insert_id(user_id) 

limit 1

Добавление last_insert_id(user_id) в предложение where указывает MySQL установить для своей внутренней переменной идентификатор найденной строки. Когда вы передаете значение, last_insert_id(expr), подобное этому, оно в конечном итоге возвращает это значение, которое в случае таких идентификаторов, как здесь, всегда является положительным целым числом и, следовательно, всегда оценивается как истинное, никогда не противореча предложению where. Это работает только в том случае, если какая-то строка действительно была найдена, поэтому не забудьте проверить затронутые строки. Затем вы можете получить идентификатор несколькими способами.

MySQL last_insert_id()

Вы можете генерировать последовательности без вызова LAST_INSERT_ID(), но полезность использования функции таким образом заключается в том, что значение идентификатора сохраняется на сервере как последнее автоматически сгенерированное значение. Это безопасно для многих пользователей, потому что несколько клиентов могут выполнить оператор UPDATE и получить собственное значение последовательности с помощью оператора SELECT (или mysql_insert_id()), не затрагивая и не подвергаясь влиянию других клиентов, которые генерируют свои собственные значения последовательности.

MySQL mysql_insert_id()

Также этот оператор возвращает значение, созданное для столбца AUTO_INCREMENT предыдущим оператором INSERT или UPDATE. Используйте эту функцию после того, как вы выполнили оператор INSERT в таблице, содержащей поле AUTO_INCREMENT, или при использовании INSERT или UPDATE для установки значения столбца с LAST_INSERT_ID (expr).

Причина различий между LAST_INSERT_ID() и mysql_insert_id() заключается в том, что LAST_INSERT_ID() упрощает использование в сценариях, в то время как mysql_insert_id() пытается предоставить более точную информацию о том, что происходит со столбцом AUTO_INCREMENT.

PHP mysqli_insert_id()

Выполнение оператора INSERT или UPDATE с использованием функции LAST_INSERT_ID () также изменит значение, возвращаемое функцией 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();

}

 

Ответ 4

Во-первых, отредактируйте таблицу, чтобы она автоматически отслеживала изменение строки. Удалите последнюю строку, если вы хотите знать, когда строка была изначально вставлена.

ALTER TABLE mytable

ADD lastmodified TIMESTAMP 

    DEFAULT CURRENT_TIMESTAMP 

    ON UPDATE CURRENT_TIMESTAMP;

Затем, чтобы узнать последнюю обновленную строку, вы можете использовать этот код.

SELECT id FROM mytable ORDER BY lastmodified DESC LIMIT 1;

 

Ответ 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();

}

 

Схожие статьи

Чек-листы оптимизации сайта, продвижения сайта и готовности к запуску
Web

Чек-листы оптимизации сайта, продвижения сайта и готовности к запуску

Web

PHP REST API POSTMAN. Фатальная ошибка Uncaught PDOException: SQLSTATE[42000]: Синтаксическая ошибка или нарушение доступа: 1064 У вас ошибка в синтаксисе SQL

Web

Функции startWith() и endWith() в PHP

Как и на чём лучше писать сайты?
Web

Как и на чём лучше писать сайты?