我需要在我的表中插入一个新的行(带有唯一的字段'A'),如果它已经存在(重复的字段,插入失败)-只要返回现有行的ID即可。
下面的代码运行得很好:
insert into TABLE set A=1 on duplicate key update id=last_insert_id(id)
但是现在我有了另一个问题:我如何知道返回的ID是属于新的(插入的)行还是只是一个旧的行?
是的,我可以事先做"SELECT id WHERE A=1“,但这会使程序代码过于复杂,需要两个步骤,而且看起来很难看。此外,将来我可能想要删除一些唯一的索引,然后我将不得不重写程序以及更改所有的“where”检查。也许有更好的解决方案?
已解决,请参阅我的答案
发布于 2020-06-07 10:09:16
找到了这个解决方案。它可以在控制台中工作,但不能在我的程序中工作(一定是客户端的bug,idk) -所以它可能对每个人都很好(除了我,叹息)
只需检查“受影响的行数”--新记录为1,旧记录为0
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‘标志。去掉它,现在一切都好了!
https://stackoverflow.com/questions/62239874
复制相似问题