J'ai le tableau de compteurs suivant:
CREATE TABLE cache (
key text PRIMARY KEY,
generation int
);
Je voudrais incrémenter l'un des compteurs ou le mettre à zéro si la ligne correspondante n'existe pas encore. Existe-t-il un moyen de le faire sans problèmes de concurrence dans SQL standard? L'opération fait parfois partie d'une transaction, parfois séparée.
Le SQL doit s'exécuter sans modification sur SQLite, PostgreSQL et MySQL, si possible.
Une recherche a donné plusieurs idées qui souffrent de problèmes de concurrence ou sont spécifiques à une base de données:
Essayez
INSERTune nouvelle ligne etUPDATEs'il y a eu une erreur. Malheureusement, l'erreur surINSERTabandonne la transaction en cours.UPDATEla ligne, et si aucune ligne n'a été modifiée,INSERTune nouvelle ligne.MySQL a une
ON DUPLICATE KEY UPDATEclause.
EDIT: Merci pour toutes les bonnes réponses. Il semble que Paul a raison, et il n'y a pas un seul moyen portable de le faire. C'est assez surprenant pour moi, car cela ressemble à une opération très basique.