Как получить первичный ключ последней обновленной записи в MYSQL? - PullRequest
1 голос
/ 23 декабря 2010

Мы знаем, что первичным ключом является автокремент, оператор SELECT может вернуть то, что мне нужно.А как насчет UPDATE?

Использование last_insert_id является потокобезопасным?

Ответы [ 6 ]

2 голосов
/ 23 декабря 2010

Не думаю, что last_insert_id поможет вам. Лучше всего сделать выборочное утверждение, совпадающее с вашим обновлением, и проанализировать результаты.

1 голос
/ 04 июня 2011

Использование last_insert_id безопасно для потоков?

Это соединение -безопасно, что, вероятно, то, что вы имеете в виду. От документов :

Сгенерированный идентификатор поддерживается на сервере на для каждого соединения . Это означает, что значение, возвращаемое функцией данный клиент является первым AUTO_INCREMENT значение, сгенерированное для последнее заявление, затрагивающее AUTO_INCREMENT столбец этим клиентом . Это значение не может зависеть от других клиенты, даже если они генерируют AUTO_INCREMENT значения свои. Такое поведение гарантирует, что каждый клиент может получить свой собственный идентификатор без забота о деятельности других клиенты, и без необходимости блокировки или транзакции.

(Их акцент.)

0 голосов
/ 29 ноября 2012

last_insert_id() не возвращает идентификатор недавно обновленной строки, он только возвращает идентификатор последней вставленной строки

При этом ваш вариант будет select первым, а если его нет insert, и вы можете использовать last_insert_id(), если он существует update, используя id, возвращенный из вашего первого select

0 голосов
/ 15 марта 2012

Первое, что вам нужно сделать, это сделать двумя операциями, чтобы достичь этого.

Лучшее решение, которое я могу себе представить, а) выберите PK из таблицы с тем же условием, которое вы собираетесь обновить. б) обновить записи с возвращенным PK.

Все другие решения могут потерпеть неудачу в какой-то момент.

0 голосов
/ 23 декабря 2010

Этого нельзя достичь, если у вас нет MODIFIED_DATE столбца, который вы посещаете при каждом обновлении записи, чтобы отслеживать дату вашего последнего изменения, чтобы порядок на этом.

0 голосов
/ 23 декабря 2010

Для этого вы создаете новую таблицу actiontrack, и если выполняется запрос на обновление, вставьте новую запись в эту таблицу

и затем извлеките запись в этой таблице действий, используя идентификатор действия desc

или

возьмите поле временной отметки в таблице и, если выполняется запрос на обновление, обновите также поле временной отметки

, а затем извлеките последнее новое поле временной отметки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...