首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >on duplicate key update id=last_insert_id(id) -插入真的发生了吗?

on duplicate key update id=last_insert_id(id) -插入真的发生了吗?
EN

Stack Overflow用户
提问于 2020-06-07 09:23:55
回答 1查看 69关注 0票数 0

我需要在我的表中插入一个新的行(带有唯一的字段'A'),如果它已经存在(重复的字段,插入失败)-只要返回现有行的ID即可。

下面的代码运行得很好:

代码语言:javascript
运行
复制
insert into TABLE set A=1 on duplicate key update id=last_insert_id(id)

但是现在我有了另一个问题:我如何知道返回的ID是属于新的(插入的)行还是只是一个旧的行?

是的,我可以事先做"SELECT id WHERE A=1“,但这会使程序代码过于复杂,需要两个步骤,而且看起来很难看。此外,将来我可能想要删除一些唯一的索引,然后我将不得不重写程序以及更改所有的“where”检查。也许有更好的解决方案?

已解决,请参阅我的答案

EN

Stack Overflow用户

回答已采纳

发布于 2020-06-07 10:09:16

找到了这个解决方案。它可以在控制台中工作,但不能在我的程序中工作(一定是客户端的bug,idk) -所以它可能对每个人都很好(除了我,叹息)

只需检查“受影响的行数”--新记录为1,旧记录为0

代码语言:javascript
运行
复制
mysql> INSERT INTO EMAIL set addr="test" ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id);
Query OK, 1 row affected (0.01 sec)<----- 1 = INSERTed

mysql> select last_insert_id(); //returns 1

mysql> INSERT INTO EMAIL set addr="test" ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id);
Query OK, 0 rows affected (0.00 sec) <----- 0 = OLD

mysql> select last_insert_id(); //returns 1

更新:这对我不起作用,因为我的程序在连接到mysql时一直发送'CLIENT_FOUND_ROWS‘标志。去掉它,现在一切都好了!

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62239874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档