Como faço para atualizar, inserir uma linha em uma tabela ou inseri-la se ela não existi

Tenho a seguinte tabela de contadores:

CREATE TABLE cache (
    key text PRIMARY KEY,
    generation int
);

Gostaria de incrementar um dos contadores ou defini-lo como zero se a linha correspondente ainda não existir. Existe uma maneira de fazer isso sem problemas de simultaneidade no SQL padrão? Às vezes, a operação faz parte de uma transação, às vezes é separad

O SQL deve ser executado sem modificações no SQLite, PostgreSQL e MySQL, se possíve

ma pesquisa gerou várias idéias que sofrem de problemas de simultaneidade ou são específicas de um banco de dado

TenteINSERT uma nova linha eUPDATE se houve um erro. Infelizmente, o erro emINSERT interrompe a transação atua

UPDATE a linha e, se nenhuma linha foi modificada,INSERT uma nova linha.

MySQL tem umON DUPLICATE KEY UPDATE cláusula.

EDIT: Obrigado por todas as ótimas respostas. Parece que Paul está certo e não há uma maneira única e portátil de fazer isso. Isso é bastante surpreendente para mim, pois parece uma operação muito básic

questionAnswers(10)

yourAnswerToTheQuestion