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