SQLite INSERT - ON DUPLICATE KEY UPDATE (UPSERT) SQLite INSERT - ON DUPLICATE KEY UPDATE (UPSERT) sqlite sqlite

SQLite INSERT - ON DUPLICATE KEY UPDATE (UPSERT)


INSERT OR IGNORE INTO visits VALUES ($ip, 0);UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;

This requires the "ip" column to have a UNIQUE (or PRIMARY KEY) constraint.


EDIT: Another great solution: https://stackoverflow.com/a/4330694/89771.


Since 3.24.0 SQLite also supports upsert, so now you can simply write the following

INSERT INTO visits (ip, hits)VALUES ('127.0.0.1', 1)ON CONFLICT(ip) DO UPDATE SET hits = hits + 1;


I'd prefer UPDATE (+ INSERT if UPDATE fails). Less code = fewer bugs.