Вопрос

Правильно ли я понимаю, что функция LAST_INSERT_ID() mysql не сбрасывается между попытками вставки (как это делает @@identity в sql-server)...что если непосредственно предшествующая операция вставки завершится неудачей, LAST_INSERT_ID() вернет pk любого значения pk последней вставки этого соединения в Любой таблица с автоматически увеличивающимся первичным ключом была.И если я прав в этом, не кажется ли это чуть ли не самым отсталым поведением для этой функции, которое только можно придумать?Нет ли функции mysql, которая ведет себя аналогично @@identity sql-сервера?Тот, который вернет NULL, если непосредственно предшествующий попытка вставки не создает новой записи?В качестве альтернативы, как можно с уверенностью узнать первичный ключ самой последней операции вставки?

Это было полезно?

Решение

@@identity также обычно неверен в sql server.Вы должны использовать scope_identity() в большинстве случаев вместо этого.

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

Другие советы

Сначала вы должны проверить, прошла ли вставка успешно.Если вставка прошла успешно, то вы можете положиться на LAST_INSERT_ID().

Редактировать:в php:

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query('<PUT YOUR INSERT HERE');
if(mysql_affected_rows()>0){
  $last_id=mysql_insert_id();
}else{
  //panic!
}
?>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top