344

INSERTテーブルの1つにMySQLを実行していて、テーブルに and に設定された列がitem_idあるとしましょう。autoincrementprimary key

同じクエリで新しく生成された主キーの値を出力するクエリを取得するにはどうすればよいitem_idですか?

現在、IDを取得するために2番目のクエリを実行していますが、これは間違った結果をもたらす可能性があることを考えると、良い習慣とは思えません...

これが不可能な場合、正しい ID を確実に取得するためのベスト プラクティスは何ですか?

4

13 に答える 13

34

注意!! LAST_INSERT_ID() PHP 内でこの主キー値を返そうとする場合

このスレッドに PHP のタグが付けられていないことは知っていますが、標準呼び出しを使用して PHP スクリプト化された挿入から MySQL 挿入 ID を返そうとするこの回答に出くわした人にとっては、mysql_querySQL エラーをキャプチャしないと機能せず、明らかではありません。

新しい方mysqliは複数のクエリをサポートしています - これLAST_INSERT_ID()は実際にはオリジナルからの 2 番目のクエリです。

IMOSELECT最後の主キーを識別するための別の方法は、前の操作から生成されたをmysql_insert_id()返すオプションの関数よりも安全です。AUTO_INCREMENT IDINSERT

于 2014-08-06T21:56:47.450 に答える
22

LAST_INSERT_ID()ドキュメントから:

生成された ID は、接続ごとにサーバーに保持されます。

つまり、スクリプトに対して 2 つの別々の要求が同時にある場合、それらは互いに影響を与えませんLAST_INSERT_ID()(永続的な接続を使用している場合を除きます)。

于 2013-06-14T16:27:23.953 に答える
20

ここにあなたが探しているものがあります!!!

select LAST_INSERT_ID()

SCOPE_IDENTITY()これは、で使用されている関数の最良の代替手段ですSQL Server

Last_INSERT_ID()また、クエリに続いて が起動された場合にのみ機能することにも注意する必要がありInsertます。つまり、クエリはスキーマに挿入された ID を返します。特定のテーブルの最後に挿入された ID を取得することはできません。

詳細については、MySQL の SQLServer 関数 SCOPE_IDENTITY() と同等のリンクを参照してください。

于 2013-06-14T16:27:55.793 に答える
14

Python で を使用している場合はpymysql、カーソルから を使用できますcursor.lastrowid

これは、 DB API 標準で文書化された拡張機能でPEP-249あり、他の Python MySQL 実装でも動作します。

于 2019-04-03T21:30:42.770 に答える
4

PHP を使用している場合: PDOオブジェクトでは、挿入後にlastInsertIdメソッドを簡単に呼び出すことができ ます。

それ以外の場合、LAST_INSERT_IDを使用すると、次のような値を取得できます。SELECT LAST_INSERT_ID();

于 2019-01-18T23:48:07.617 に答える
3

「$last_id = mysqli_insert_id($conn);」を使用するだけです。

于 2018-07-15T09:38:36.163 に答える