我有以下查询:
INSERT INTO table (a) VALUES (0)
ON DUPLICATE KEY UPDATE a=1
Run Code Online (Sandbox Code Playgroud)
我想要插入或更新的ID.通常我会运行第二个查询以获取此信息,因为我认为insert_id()只返回'inserted'ID而不是更新的ID.
有没有办法INSERT/UPDATE并检索行的ID而不运行两个查询?
fre*_*rik 161
查看此页面:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
在页面底部,他们解释了如何通过传递表达式使LAST_INSERT_ID对更新有意义到MySQL的功能.
从MySQL文档示例:
如果表包含AUTO_INCREMENT列并且INSERT ... UPDATE插入行,则LAST_INSERT_ID()函数返回AUTO_INCREMENT值.如果语句更新了一行,则LAST_INSERT_ID()没有意义.但是,您可以使用LAST_INSERT_ID(expr)解决此问题.假设id是AUTO_INCREMENT列.要使LAST_INSERT_ID()对更新有意义,请按如下方式插入行:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
Run Code Online (Sandbox Code Playgroud)
Ale*_*vic 34
确切地说,如果这是原始查询:
INSERT INTO table (a) VALUES (0)
ON DUPLICATE KEY UPDATE a=1
Run Code Online (Sandbox Code Playgroud)
并且'id'是自动增量主键,而不是这个工作解决方案:
INSERT INTO table (a) VALUES (0)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), a=1
Run Code Online (Sandbox Code Playgroud)
全部在这里:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
如果表包含AUTO_INCREMENT列并且INSERT ... UPDATE插入行,则LAST_INSERT_ID()函数返回AUTO_INCREMENT值.如果语句更新了一行,则LAST_INSERT_ID()没有意义.但是,您可以使用LAST_INSERT_ID(expr)解决此问题.假设id是AUTO_INCREMENT列.