Em uma tabela em que cada linha tem um contador (apenas um valor inteiro), preciso obter o valor atual e aumentá-lo ao mesmo tempo .
Efetivamente, eu quero fazer isso:
SELECT counter FROM table WHERE id=123
UPDATE table SET counter=counter+1 WHERE id=123
Mas fazer isso como duas consultas obviamente não é seguro para threads: vários processos que fazem a mesma coisa (na mesma linha) podem obter o mesmo valor de contador. Eu preciso que todos sejam únicos, para que cada processo obtenha o valor atual real e o aumente em um.
Posso pensar em uma construção em que implemento um bloqueio manual por linha, mas me pergunto se existe uma maneira mais fácil de fazer isso.