[英]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
列的值。
如果符合以下條件,則無效
AUTO_INCREMENT
列提供顯式值 LAST_INSERT_ID
LAST_INSERT_ID()
將返回插入的第一行的值,而不是最后一行的值)。 我還沒有使用過MyBatis,但是在向表中插入內容之后,請檢查auto_increment值是否正在使用以下MySQL查詢進行更新:
SELECT Auto_increment FROM (SHOW TABLE STATUS LIKE '<table-name>') as A;
還要確保您沒有給auto_increment
字段賦予明確的值。 您需要讓DB為自己設置它。
以下是您可以嘗試的其他一些事項:
我有兩個解決方案,在實現了很復雜之后我發現了第二個...我會告訴你第二個哪個更好...這很簡單...只是在查詢中插入此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.