我有一个数据库需要在重复键的情况下处理2个特殊场景。在每一种情况下,我需要获得该行的唯一ID是否有重复的记录,或不当没有更新时获取INSERT DUPLICATE KEY UPDATE语句的last_insert_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
方法为我提供正确的值,无论它是新记录还是重复记录。一切都很好。
场景#2record_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和减1来愚弄它,但没有运气。
解决方法是什么?我真的不想使用SELECT
声明(我每分钟发送数百个查询,我真的不想增加系统负载)
什么是你的表的主键?由于您使用的是PHP,因此您可以使用php – SIDU
主键为id来计算要插入值后插入的值 – hvs
添加更新的“TIMESTAMP”列? – miken32