簡體   English   中英

SELECT LAST_INSERT_ID()

[英]SELECT LAST_INSERT_ID()

有人可以解釋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

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()將返回插入的第一行的值,而不是最后一行的值)。
LAST_INSERT_ID()

是按用戶和每個連接。

您可以在MySQL doc中閱讀更多內容。

我還沒有使用過MyBatis,但是在向表中插入內容之后,請檢查auto_increment值是否正在使用以下MySQL查詢進行更新:

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

還要確保您沒有給auto_increment字段賦予明確的值。 您需要讓DB為自己設置它。

以下是您可以嘗試的其他一些事項:

  1. 確保以整數形式讀取結果。 顯示了一個類似的情況,需要顯式轉換為Int32。

  2. 如果您正在進行多次插入,請知道只將第一個插入的元組的ID視為LAST_INSERT_ID 根據這個 (搜索use test )。

我有兩個解決方案,在實現了很復雜之后我發現了第二個...我會告訴你第二個哪個更好...這很簡單...只是在查詢中插入此keyProperty="id"像這樣: <insert id="insertInto" parameterType="Something" keyProperty="id" timeout="0"> INSERT INTO something (something) VALUES (#{something}) </insert>查詢返回插入行的id謝謝!

例1:

mysql> CREATE TABLE prime2 LIKE prime;
Query OK, 0 rows affected (0.08 sec)

mysql> SELECT LAST_INSERT_ID(); //From table prime!!!
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                3 |
+------------------+
1 row in set (0.00 sec)


mysql> INSERT INTO prime2 VALUES(1,1);
Query OK, 1 row affected (0.01 sec)

mysql> SELECT LAST_INSERT_ID(); 
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                3 |
+------------------+
1 row in set (0.00 sec) //From table prime!!!

您必須使用表名來選擇最后一個插入ID。

例:

SELECT LAST_INSERT_ID() FROM my_table;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM