LAST_INSERT_ID 在 UPDATE 上不起作用
Posted
技术标签:
【中文标题】LAST_INSERT_ID 在 UPDATE 上不起作用【英文标题】:LAST_INSERT_ID not working on UPDATE 【发布时间】:2013-08-30 10:37:29 【问题描述】:如果我使用这个 SQL:
UPDATE formulare SET EV_id=59, EV_status=5 WHERE EV_id=57 AND ID_uziv=12;SELECT LAST_INSERT_ID();
我会得到0
作为最后一个插入ID。
我正在使用 php mysqli_insert_id
,据说:
The mysqli_insert_id() function returns the ID generated by a query
on a table with a column having the AUTO_INCREMENT attribute.
If the last query wasn't an INSERT or UPDATE statement
or if the modified table does not have a column with the AUTO_INCREMENT attribute,
this function will return zero.
我的表formualre
有auto increment
列,所以我不知道问题出在哪里
【问题讨论】:
update 不会给你最后的插入 id。它只会给你更新的记录数。最后的插入 id 只用于插入last_
insert _id
应该告诉你任何你需要知道的事情。没有插入任何东西。所以没有返回ID。
你能链接到你引用的文档吗?
documentation here 我对您的回答在@dystroy 回答下
【参考方案1】:
如果 no 创建了新的自动增量值,LAST_INSERT_ID()
将不起作用。
解决办法是这样的:
UPDATE formulare
SET EV_id=LAST_INSERT_ID(59),
EV_status=5
WHERE EV_id=57
AND ID_uziv=12;
SELECT LAST_INSERT_ID();
注意:我猜,EV_id
是 auto_increment 主键。
否则你应该做这样的查询:
UPDATE formulare
SET key_col = LAST_INSERT_ID(key_col),
EV_id=59,
EV_status=5
WHERE EV_id=57
AND ID_uziv=12;
SELECT LAST_INSERT_ID();
【讨论】:
在行更新时执行INSERT ... ON DUPLICATE KEY UPDATE
查询以获取id
也非常有用。甚至文档也提到了这个技巧。 :)【参考方案2】:
来自the documentation:
上一个查询为 AUTO_INCREMENT 列生成的 ID 成功,如果上一个查询没有生成 AUTO_INCREMENT,则为 0 值,如果没有建立 MySQL 连接,则为 FALSE。
由于您的更新没有创建新记录,因此它没有生成任何 AUTO_INCREMENT 值。
【讨论】:
好的,但是为什么会有这个...If the last query wasn't an INSERT or UPDATE statement...
?
这句话很好奇,但可能作者指的是this kind of statement。【参考方案3】:
UPDATE 查询更新现有记录,它不返回任何新 ID。
mysqli_insert_id retrieves the ID generated for an AUTO_INCREMENT column by the
previous query (usually INSERT).
没有 INSERT 查询,这就是原因,执行 UPDATE 查询后你不会得到任何 Id。
更多信息,请参考mysql_insert_id
【讨论】:
以上是关于LAST_INSERT_ID 在 UPDATE 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何从 LAST_INSERT_ID(`my_column`+1) 获取表达式的值?
阿里读写分离数据源SELECT LAST_INSERT_ID()获取不到id