6

MySQL関数LAST_INSERT_ID()がどのように機能するかを誰かが説明できますか?データベースに最後に挿入された行のIDを取得しようとしていますが、毎回1を取得します。

私はmybatisを使用しています。

クエリの例は次のとおりです。

<insert id="insertInto" parameterType="Something" timeout="0">
  INSERT INTO something (something) VALUES (#{something})
  <selectKey resultType="int">
    SELECT LAST_INSERT_ID()
  </selectKey>
</insert>

コード:

System.out.println("Id : " + id)

出力:

Id : 1
4

6 に答える 6

10

LAST_INSERT_ID現在のセッションで列に暗黙的に挿入された最後の値を返します。AUTO_INCREMENT

CREATE TABLE mytable (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT NOT NULL);

INSERT列を自動インクリメントするには、リストから除外する必要があります。

INSERT
INTO    mytable (value)
VALUES  (1)

またはNULL値を指定します。

INSERT
INTO    mytable (id, value)
VALUES  (NULL, 1)

その後、

SELECT  LAST_INSERT_ID()

AUTO_INCREMENT列に挿入された値が返されidます。

次の場合、これは機能しません。

  1. AUTO_INCREMENT列に明示的な値を指定します
  2. LAST_INSERT_ID別のセッションで呼び出します
  3. 同じステートメントに複数の行を挿入します (LAST_INSERT_ID()最後の行ではなく、挿入された最初の行の値を返します)。
于 2012-04-24T08:28:12.230 に答える
4
LAST_INSERT_ID()

ユーザーごと、接続ごとです。

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

于 2012-04-24T08:24:43.217 に答える
0

私には2つの解決策があり、非常に複雑な実装を行った後、2番目の解決策を見つけました...2番目にどちらが優れているかを説明します...それは非常に単純です...クエリでこれを挿入するだけですこのkeyProperty="id" ように: <insert id="insertInto" parameterType="Something" keyProperty="id" timeout="0"> INSERT INTO something (something) VALUES (#{something}) </insert> クエリは挿入された行のIDを返しますありがとう!

于 2012-04-24T20:10:16.120 に答える
0

MyBatis はまだ使用していませんが、テーブルに何かを挿入した後、次の MySQL クエリで auto_increment 値が更新されていることを確認します。

SELECT Auto_increment FROM (SHOW TABLE STATUS LIKE '<table-name>') as A;

また、フィールドに明示的な値を指定していないことを確認してくださいauto_increment。DBにそれ自体を設定させる必要があります。

他にも次のことを試すことができます。

  1. 結果は必ず整数として読み取ってください。これは、Int32 への明示的な変換が必要な類似のケースを示しています。

  2. 複数の挿入を行っている場合は、最初に挿入されたタプルの ID のみが として扱われることに注意してくださいLAST_INSERT_IDこれによると( を検索use test)。

于 2012-04-24T08:51:09.220 に答える
-1

最後の挿入 ID を選択するには、テーブル名を使用する必要があります。

例:

SELECT LAST_INSERT_ID() FROM my_table;
于 2012-08-14T13:20:28.697 に答える