没有更新

时间:2016-01-11 04:28:35

标签: php mysql mysqli

我有一个数据库,在重复键的情况下需要处理2个特殊情况。在每种情况下,无论是否有重复记录,我都需要获取行的唯一ID

场景#1 record_count字段必须增加1.所以mysql语法看起来像这样

 INSERT INTO (id, value, record_count) VALUES ('foo','bar', 1) ON DUPLICATE KEY UPDATE record_count=record_count+1

在这种情况下,$mysqli->insert_id方法给出了正确的值,无论是新记录还是重复记录。一切都很好。

场景#2 record_count字段不需要递增。我尝试了3条陈述

INSERT IGNORE INTO (id, value, record_count) VALUES ('foo','bar', 1)

INSERT INTO (id, value, record_count) VALUES ('foo','bar', 1) ON DUPLICATE KEY UPDATE record_count=record_count

INSERT INTO (id, value, record_count) VALUES ('foo','bar', 1) ON DUPLICATE KEY UPDATE record_count=record_count+1-1 

但是在每种情况下$mysqli->insert_id都让我0,因为我没有更新或插入任何东西。我以为我可以通过添加和减去1而不是运气来欺骗它。

解决方法是什么?我真的不想使用SELECT语句(我每分钟发送数百个查询,我真的不想增加系统负载)

2 个答案:

答案 0 :(得分:0)

因为,我没有收到任何答案,这就是我正在做的事情。

我创建了另一个存储md5哈希的虚拟列。当我不想更新record_count时,我更新了虚拟列,这样我就可以得到列的id。

正如@ miken32建议的那样,我也可以使用时间戳列(这可能更有效)。

如果存在,还在寻找更好的答案。

答案 1 :(得分:0)

mysql_insert_id() documentation详述了所有案例,但明确将INSERT ... ON DUPLICATE KEY UPDATE详细说明为仅在数据库发生实际更改时进行更新。

因此,要从MySQL获取插入ID,您必须在数据库中更改某些。正如所建议的那样,时间戳列符合账单。或者,您可以使用递增计数器列,如果这将在以后为您提供更多有用的信息。