有人可以解释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
答案 0 :(得分:8)
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()
将返回插入的第一行的值,而不是最后一行的值。答案 1 :(得分:5)
答案 2 :(得分:0)
我还没有使用过MyBatis,但是在向表中插入内容之后,请检查是否正在使用以下MySQL查询更新auto_increment值:
SELECT Auto_increment FROM (SHOW TABLE STATUS LIKE '<table-name>') as A;
同时确保您没有给予auto_increment
字段明确的价值。您需要让DB为自己设置它。
以下是您可以尝试的其他一些事项:
确保以整数形式读取结果。 This显示了一个需要显式转换为Int32的类似案例。
如果您正在进行多次插入,请知道只有第一个插入的元组的ID被视为LAST_INSERT_ID
。根据{{3}}(搜索use test
)。
答案 3 :(得分:0)
我有两个解决方案,在实现了很复杂的后,我发现了第二个......
我会告诉你第二个哪个更好......
它非常简单......只需在查询中插入此keyProperty="id"
像这样 :
<insert id="insertInto" parameterType="Something" keyProperty="id" timeout="0">
INSERT INTO something (something) VALUES (#{something})
</insert>
查询返回插入行的id
谢谢!
答案 4 :(得分:0)
示例1:
var topFolders = app.activeDocument.layerSets.length; //how many folders
var todayFolder = layerSetID(topFolders-1); //totally made up layerSetID()
app.activeDocument.activeLayer = todayFolder; //make folder active
答案 5 :(得分:-1)
您必须使用表名来选择最后一个插入ID。
示例:
SELECT LAST_INSERT_ID() FROM my_table;