DB設計時には主キーの競合を防ぐため、オートインクリメント(auto_increment型)フィールドがよく使われます。したがって、データを挿入する前には、レコードの主キーが何であるかわからないことがよくあります。後続のクエリまたはカスケード クエリを容易にするために、レコードの行を挿入した後に DB によって自動的に生成された主キーを取得する必要があります。以下にいくつかの方法があります:
この方法の欠点は、高い同時実行性に適していないことです。同時に挿入した場合、返される値は正確ではない可能性があります。
MySQL:
リーリー重要: INSERT ステートメントを使用して複数の行を挿入する場合、LAST_INSERT_ID() はデータの最初の行が挿入されたときに生成された値のみを返します。その理由は、他のサーバーに依存して同じ INSERT ステートメントを複製することが容易になるためです。
MS-SQL サーバー:
リーリー@@identity は、ID 属性を持つテーブルにデータが最後に挿入されたときの、対応する自動インクリメント列の値を表します。これは、 システム によって定義されるグローバル変数です。通常、システム定義のグローバル変数は @@ で始まり、ユーザー定義変数は @ で始まります。たとえば、テーブル A があり、その自動インクリメント列が id であるとします。テーブル A にデータ行が挿入されると、データの挿入後に自動インクリメント列の値が 101 に自動的に増加すると、選択した値が返されます。 @@identity は 101 です。 @@identity を使用するための前提条件は、挿入操作の実行後、select @@identity を実行するときに接続が閉じられていないことです。そうでない場合、結果は NULL 値になります。
追加:
SCOPE_IDENTITY、IDENT_CURRENT、および @@IDENTITY は、すべて IDENTITY 列に挿入された値を返すという点で機能的に似ています。
IDENT_CURRENT はスコープとセッションによって制限されませんが、指定されたテーブルによって制限されます。 IDENT_CURRENT は、任意のセッションおよびスコープ内の特定のテーブルに対して生成された値を返します。詳細については、「IDENT_CURRENT」を参照してください。
SCOPE_IDENTITY と @@IDENTITY は、現在のセッションのテーブル内で生成された最後の ID 値を返します。ただし、SCOPE_IDENTITY は現在のスコープに挿入された値のみを返します。@@IDENTITY は特定のスコープに制限されません。
追加:
PHP-MySQL は、MySQL データベースを操作するための PHP のオリジナルの拡張機能です。PHP-MySQLi の i は Improvement を意味し、拡張機能に関する限り、セキュリティも向上します。
a. Mysql は mysqli の概念に関連しています:
b. mysql と mysqli の違い:
c. mysql と mysqli の使用法:
追記: mysqli は手続き型で動作します。mysqli_query (リソース識別子、SQL ステートメント) などの一部の関数はリソースを指定する必要があり、リソース識別子のパラメーターは前に配置されます が、mysql_query (SQL ステートメント、リソース ID ') はオプションであり、デフォルト値は最後に開かれた接続またはリソースです。
致命的なエラー: クラス 'mysqli' が ...
に見つかりません
通常、mysqli クラスはデフォルトで有効になっていないため、php.ini を変更し、php_mysqli.dll の前にある「;」を削除する必要があります。 。
d. mysql_connect() と mysqli_connect()
リーリー
JDBC 3.0: getGeneratedKeys()リーリー