Neben dem Einfügen von Daten ist es mit SQL sehr leicht möglich, Daten zu modifizieren. In diesem Zusammenhang ist der Befehl UPDATE von zentraler Bedeutung:
test=# \h UPDATE
Command: UPDATE
Description: update rows of a table
Syntax:
UPDATE [ ONLY ] table [ [ AS ] alias ]
SET { column = { expression | DEFAULT } |
( column [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...]
[ FROM fromlist ]
[ WHERE condition | WHERE CURRENT OF cursor_name ]
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
UPDATE ermöglicht die effiziente Modifikation von Datensätzen in einer Tabelle. In der SET Clause gibt man an, welchen Wert die Spalten nach dem UPDATE annehmen sollen. In der WHERE Clause definiert man, welche Datensätze vom UPDATE betroffen sein sollen.
Bevor wir uns ein Beispiel ansehen, wollen wir uns den Datenbestand in Erinnerung rufen:
test=# SELECT * FROM t_person; svnr | name -----------+--------------- 123456789 | Peter Fischer 9876543 | 123123123 | Anton Hudlic (3 rows)
Ziel ist es jetzt, den Namen der Person mit der Sozialversicherungsnummer '9876543' zu modifizieren. Das geht dann so:
test=# UPDATE t_person SET name = 'Paul Fischer' WHERE svnr = '9876543'; UPDATE 1 test=# SELECT * FROM t_person; svnr | name -----------+--------------- 123456789 | Peter Fischer 123123123 | Anton Hudlic 9876543 | Paul Fischer (3 rows)
PostgreSQL bietet auch die Möglichkeit, Spalten auf einen Default-Wert zu setzen. Haben Sie bei CREATE TABLE keinen anderen DEFAULT Wert verwendet, wird PostgreSQL eine leere Spalte erzeugen:
test=# UPDATE t_person SET name = DEFAULT WHERE svnr = '9876543'; UPDATE 1 test=# SELECT * FROM t_person; svnr | name -----------+--------------- 123456789 | Peter Fischer 123123123 | Anton Hudlic 9876543 | (3 rows)
Auch UPDATE stellt eine RETURNING-Clause bescheid, die es uns ermöglicht, direkt zu sehen, welche Datensätze von unserem Statement modifiziert worden sind. Viele Benutzer schätzen diese Funktionalität vor allem dann, wenn man manuell kritische Updates vornimmt, bei denen auf keinen Fall etwas schief gehen dann. Weiters hilft RETURNING bei der Optimierung Ihrer Anwendung, weil sie den vollständigen Datensatz nach der Veränderung nicht erneut abfragen müssen. Auch hier wieder ein einfaches Beispiel, das zeigt, wie der Befehl verwendet werden kann:
test=# UPDATE t_person SET name = 'Josef Bauermann' WHERE name = 'Josef Ackermann' RETURNING svnr, name; svnr | name --------+----------------- 323223 | Josef Bauermann (1 row)
Wollen Sie etwas komplexere UPDATEs durchführen, so ist auch das möglich aber dazu später mehr.