我有一个数据库,在重复键的情况下需要处理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
语句(我每分钟发送数百个查询,我真的不想增加系统负载)
答案 0 :(得分:0)
因为,我没有收到任何答案,这就是我正在做的事情。
我创建了另一个存储md5哈希的虚拟列。当我不想更新record_count时,我更新了虚拟列,这样我就可以得到列的id。
正如@ miken32建议的那样,我也可以使用时间戳列(这可能更有效)。
如果存在,还在寻找更好的答案。
答案 1 :(得分:0)
mysql_insert_id() documentation详述了所有案例,但明确将INSERT ... ON DUPLICATE KEY UPDATE
详细说明为仅在数据库发生实际更改时进行更新。
因此,要从MySQL获取插入ID,您必须在数据库中更改某些。正如所建议的那样,时间戳列符合账单。或者,您可以使用递增计数器列,如果这将在以后为您提供更多有用的信息。