Ali*_*xel 92 mysql sql database sqlite upsert
MySQL有这样的东西:
INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON DUPLICATE KEY UPDATE hits = hits + 1;
Run Code Online (Sandbox Code Playgroud)
据我所知,SQLite中不存在此功能,我想知道的是,如果有任何方法可以实现相同的效果而无需执行两个查询.此外,如果无法做到这一点,您更喜欢什么:
dan*_*n04 115
INSERT OR IGNORE INTO visits VALUES ($ip, 0);
UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;
Run Code Online (Sandbox Code Playgroud)
这要求"ip"列具有UNIQUE(或PRIMARY KEY)约束.
编辑:另一个很好的解决方案:https://stackoverflow.com/a/4330694/89771.
szm*_*618 14
从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;
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)