mysql @@ идентификационные данные по сравнению с SQL-сервером last_insert_id ()

Я корректен в понимании, что LAST_INSERT_ID mysql () функция не сбрасывает между попытками вставки (как @@, идентификационные данные делают в SQL-сервере)..., что, если сразу предыдущая операция вставки перестала работать, LAST_INSERT_ID () возвратит pk того, чем был pk последней вставки того соединения к какой-либо таблице с первичным ключом автопостепенного увеличения. И если я корректен в этом, разве это не походит примерно на самое отсталое поведение для этой функции, которую можно было придумать? Нет ли никакая функция mysql, которая ведет себя так же к SQL-серверу @@ идентификационные данные? Тот, который возвратит ПУСТОЙ УКАЗАТЕЛЬ, если сразу предыдущая попытка вставки не создаст новой записи? С другой стороны, как каждый знает с уверенностью первичный ключ новой операции вставки?

6
задан codemonkey 5 February 2010 в 18:14
поделиться

2 ответа

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

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

6
ответ дан 17 December 2019 в 00:09
поделиться

Вы должны сначала проверить, была ли вставка успешной. Если вставка прошла успешно, вы можете положиться на 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!
}
?>
1
ответ дан 17 December 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: