关于重复键更新 id=last_insert_id(id) - INSERT 真的发生了吗?

on duplicate key update id=last_insert_id(id) - did the INSERT actually happen?

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

此代码运行良好:

insert into TABLE set A=1 on duplicate key update id=last_insert_id(id)

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

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

[已解决,看我的回答]

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

只需检查 'affected rows count' - 新记录为 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

UPD:它对我不起作用,因为我的程序在连接到 mysql 时一直发送 'CLIENT_FOUND_ROWS ' 标志。删除了,现在一切正常!