mysqlの@@ SQLサーバLAST_INSERT_ID対アイデンティティ()
-
18-09-2019 - |
質問
直前の挿入操作が失敗した場合、LAST_INSERT_ID()は返すことを...私は(@@アイデンティティがSQLサーバの場合と同様)MySQLのLAST_INSERT_ID()関数は、インサートの試行間でリセットしないという理解で正しいアム自動インクリメントの主キーを持つの のいずれかのののテーブルにその接続の最後のインサートのどんなPKのPKました。私はこの中で正しいだ場合と、これは1つが思い付くことができ、この機能のためにちょうど約最遅行動のように見えるしていませんか? SQLサーバの@@アイデンティティと同様に動作なしのMySQL関数はありませんか? の直後にのの前の挿入試行が新しいレコードを作成していない場合はNULLを返しますワン?また、どのように1は、確実に最新の挿入操作の主キーを知っていますか?
解決
@@アイデンティティは、同様に、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!
}
?>
所属していません StackOverflow