6

mysqlのLAST_INSERT_ID()関数は挿入の試行の間にリセットされないことを理解していますか(@@ Identityがsql-serverで行うように)...直前の挿入操作が失敗した場合、LAST_INSERT_ID()は何でものpkを返します自動インクリメントの主キーを持つテーブルのその接続の最後の挿入のpkはでした。そして、私がこれで正しければ、これは、この関数で思いつく可能性のある最も遅延した動作のように見えませんか?sql-serverの@@identityと同様に動作するmysql関数はありませんか?直前の挿入試行で新しいレコードが作成されない場合にNULLを返すものはありますか?あるいは、最新の挿入操作の主キーを確実に知るにはどうすればよいでしょうか。

4

2 に答える 2

6

@@identityは通常SQLサーバーでも間違っています。scope_identity()ほとんどの場合、代わりに使用する必要があります。

MySqlでは、last_insert_id()を安全に使用できるはずです。これは、挿入エラーの後にこの関数を呼び出す唯一の方法は、挿入エラーを正しくキャッチして説明していることだからです。それ以外の場合は、コマンドを処理していることになります。つまり、last_insert_id()はエラー処理メカニズムではありません。

于 2010-02-05T18:22:34.710 に答える
1

最初に挿入が成功したかどうかを確認する必要があります。挿入が成功した場合は、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!
}
?>
于 2010-02-05T18:23:58.920 に答える