update sql mysql database sqlite upsert

sqlite insert or update



INSERTAR SQLite-EN ACTUALIZACIÓN DE LLAVE DUPLICADA (4)

Debe usar memcached para esto ya que es una sola clave (la dirección IP) que almacena un único valor (el número de visitas). Puede usar la función de incremento atómico para asegurarse de que no haya condiciones de "carrera".

Es más rápido que MySQL y guarda la carga para que MySQL pueda enfocarse en otras cosas.

MySQL tiene algo como esto:

INSERT INTO visits (ip, hits) VALUES (''127.0.0.1'', 1) ON DUPLICATE KEY UPDATE hits = hits + 1;

Hasta donde sé, esta característica no existe en SQLite, lo que quiero saber es si hay alguna manera de archivar el mismo efecto sin tener que ejecutar dos consultas. Además, si esto no es posible, ¿qué prefieres?

  1. SELECT + (INSERT o UPDATE) o
  2. ACTUALIZAR (+ INSERTAR si la actualización falla )

La respuesta actual solo funcionará en sqlite O mysql (dependiendo de si usa O o no). Entonces, si quieres compatibilidad cross dbms, lo siguiente será ...

REPLACE INTO `visits` (ip, value) VALUES ($ip, 0);


Preferiría UPDATE (+ INSERT if UPDATE fails) . Menos código = menos errores.


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

Esto requiere que la columna "ip" tenga una restricción ÚNICA (o PRIMARY KEY).

EDITAR: Otra gran solución: https://.com/a/4330694/89771 .