MySQL有这样的东西:
INSERT INTO visits (ip, hits) VALUES ('127.0.0.1', 1) ON DUPLICATE KEY UPDATE hits = hits + 1;
据我所知,SQLite中不存在此功能,我想知道的是,如果有任何方法可以实现相同的效果而无需执行两个查询.此外,如果无法做到这一点,您更喜欢什么:
SELECT +(INSERT或UPDATE)或
更新(如果UPDATE失败,则为 + INSERT )
dan04.. 115
INSERT OR IGNORE INTO visits VALUES ($ip, 0); UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;
这要求"ip"列具有UNIQUE(或PRIMARY KEY)约束.
编辑:另一个很好的解决方案:https://stackoverflow.com/a/4330694/89771.
INSERT OR IGNORE INTO visits VALUES ($ip, 0); UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;
这要求"ip"列具有UNIQUE(或PRIMARY KEY)约束.
编辑:另一个很好的解决方案:https://stackoverflow.com/a/4330694/89771.
我更喜欢UPDATE (+ INSERT if UPDATE fails)
.更少的代码=更少的错误.
从3.24.0开始,SQLite也支持upsert,所以现在你可以简单地编写以下内容
INSERT INTO visits (ip, hits) VALUES ('127.0.0.1', 1) ON CONFLICT(ip) DO UPDATE SET hits = hits + 1;
The current answer will only work in sqlite OR mysql (depending on if you use OR or not). So, if you want cross dbms compatibility, the following will do...
REPLACE INTO `visits` (ip, value) VALUES ($ip, 0);