ホームページ >データベース >mysql チュートリアル >MySQL を PHP に挿入した後、競合状態を発生させずに自動インクリメント ID を取得する方法

MySQL を PHP に挿入した後、競合状態を発生させずに自動インクリメント ID を取得する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-12-27 08:50:18957ブラウズ

How to Retrieve the Auto-Incrementing ID After a MySQL Insert in PHP Without Race Conditions?

競合状態なしで PHP/MySQL に行を挿入した後に 'id' フィールドを取得する

MySQL テーブルに行を挿入するとき自動インクリメントされる「id」フィールドでは、後続の操作で使用するためにその「id」値を取得することが望ましいことがよくあります。ただし、単純に行を挿入してデータベースに「id」をクエリすると、その間に別の行が挿入された場合に競合状態が発生する可能性があります。

「id」取得の整合性を確保するための信頼できる方法は次のとおりです。 mysqli_insert_id() 関数を使用します。この関数は、現在の接続で実行された最後の INSERT ステートメントによって生成された ID を返します。

実装方法は次のとおりです。

$link = mysqli_connect('127.0.0.1', 'my_user', 'my_pass', 'my_db');
mysqli_query($link, "INSERT INTO mytable (1, 2, 3, 'blah')");
$id = mysqli_insert_id($link);

別のアプローチですが、あまり推奨されませんが、 LAST_INSERT_ID() を使用した単一のアトミック トランザクションで、行をプライマリ テーブルに挿入し、対応する行をプライマリ テーブルの「id」を参照する 2 番目のテーブルに挿入します。

mysqli_query($link, "INSERT INTO my_user_table ...;
  INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");

各 MySQL 接続は「id」値を個別に追跡し、同時挿入による競合の発生を防ぐことに注意してください。

以上がMySQL を PHP に挿入した後、競合状態を発生させずに自動インクリメント ID を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。