MySQLのLAST_を使うINSERT_ID--回転

1795 ワード

LAST_INSERT_ID
最後のINSERTまたはUPDATE操作を自動的にAUTO_に戻すINCREMENT列の最初に発生する値を設定する.参照ここ
The ID that was generated is maintained in the server on a per-connection basis.
LAST_INSERT_IDは単一の接続に基づいており,他のクライアント接続によって変更されることは不可能である.
SELECTでLAST_INSERT_ID(); クエリLAST_INSERT_IDの値
Important: If you insert multiple rows using a single  INSERT  statement,  LAST_INSERT_ID()  returns the value generated for the first inserted row only.
単一INSERT文を使用して複数のレコードを挿入し、LAST_INSERT_IDは、挿入する第1のレコードの値のみを返す.たとえば
mysql> INSERT INTO t VALUES (NULL, 'aaaa'), (NULL, 'bbbb'), (NULL, 'cccc');   
  • mysql> SELECT * FROM t;   

  • +----+------+   
  • | id | name |   

  • +----+------+   
  • |  1 | Bob  |   

  • |  2 | aaaa |   
  • |  3 | bbbb |   

  • |  4 | cccc |   
  • +----+------+   

  • mysql> SELECT LAST_INSERT_ID();   
  • +------------------+   

  • | LAST_INSERT_ID() |   
  • +------------------+   

  • |                2 |   
  • +------------------+  

  • ID 2は、第1のレコードaaaを挿入する際に発生する.
    LAST_INSERT_IDはtableに関係なく、テーブルaにデータを挿入した後、テーブルbにデータを挿入すると、LAST_INSERT_IDが変わります.
    一般に挿入したばかりのデータのidを取得するにはselect max(id)from tableを用いることができる.
    しかし、マルチスレッドの場合、だめです.マルチユーザが交互にデータを挿入する場合max(id)は明らかに使用できない.
    これはLAST_を使うべきですINSERT_IDとか、LAST_INSERT_IDはConnectionベースで、各スレッドが独立したConnectionオブジェクトを使用する限り、LAST_INSERT_ID関数は、接続ペアAUTO_を返します.INCREMENT列の最新のinsert or update操作で生成された最初のレコードのID.この値は他のクライアント(Connection)に影響されず、他のクライアントのアクティビティを心配せずに自分のIDを取り戻すことができ、ロックをかける必要がないことを保証します.
     
    原文:http://wangcheng.iteye.com/blog/54293