2011-07-08 11 views
1

Cakephpのクエリ SELECT LAST_INSERT_ID()AS insertID 'id'は挿入されたレコードですが、上記のクエリが実行される前に他の並列処理で別のレコードが追加された場合はどうなりますか?

答えて

1

MySQLでは、LAST_INSERT_ID()は接続固有のものです。そうしないと、多くの望ましくない結果につながります。別のプロセスが別の接続を使用している場合よりもレコードを追加した場合、現在の接続ではLAST_INSERT_ID()の戻り値は変更されません。

他のRDBMSでは扱いが異なると思われますが、使用するデータベースシステムについては言及していません。

MySQLのドキュメントの言葉で:

生成されたIDは、接続ごとにサーバに維持されます。つまり、関数が指定したクライアントに返す値は、そのクライアントがAUTO_INCREMENT列に影響を与える最新の文に対して生成された最初のAUTO_INCREMENT値です。この値は、たとえ自身のAUTO_INCREMENT値を生成したとしても、他のクライアントの影響を受けることはありません。この動作により、各クライアントは、ロックやトランザクションを必要とせずに、他のクライアントのアクティビティを意識することなく、独自のIDを取得できます。

詳細については、MySQLを参照してください。

+0

私はtatが役立つと思います。 – shahalpk

+0

cakephpのsave()呼び出しの後に、これ以外の挿入されたレコードを取り出す他の方法があります – shahalpk

関連する問題