Aumenta un valore in Postgres


108

Sono un po 'nuovo per Postgres. Voglio prendere un valore (che è un numero intero) in un campo in una tabella postgres e incrementarlo di uno. Ad esempio, se la tabella "totali" avesse 2 colonne, "nome" e "totale" e Bill avesse un totale di 203, quale sarebbe l'istruzione SQL che userei per spostare il totale di Bill a 204?

Risposte:


209
UPDATE totals 
   SET total = total + 1
WHERE name = 'bill';

Se vuoi assicurarti che il valore corrente sia effettivamente 203 (e non aumentarlo di nuovo accidentalmente) puoi anche aggiungere un'altra condizione:

UPDATE totals 
   SET total = total + 1
WHERE name = 'bill'
  AND total = 203;

1
Stavo cercando di incrementare il tipo di dati non intero e ottenere: ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1 Risolto lanciando il valore come numero intero in questo modoSET total = total::int + 1
Stew-au

33
@ Stew-au: non memorizzare i numeri nelle colonne varchar. Questo ti darà problemi a lungo termine. Usa un numero intero (o bigint o qualsiasi altra cosa sia adatta) ma non usare un tipo di dati carattere.
a_horse_with_no_name

4
Questa affermazione è atomica o dovrei prima bloccare la tabella in modo pessimistico per le scritture? (La mia paura è che tra l'assegnazione del totale e il recupero del totale per il totale + 1 sia stato fatto un po 'di scrittura sul tavolo.)
miho

9
Una singola istruzione è sempre atomica in un database relazionale. Tuttavia, l'esecuzione dell'aggiornamento non impedirà ad altri di leggere i vecchi valori fino a quando la transazione non verrà
confermata

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.