Sperrt die gesamte Tabelle UPDATE
(ohne Angabe einer WHERE
Klausel) eine Tabelle in PostgreSQL? Verhindert es beispielsweise, dass Zeilen gelöscht / eingefügt werden?
ZB wenn ich laufe
UPDATE t1 SET key = 'value'
Kann ich erwarten, dass t1
während der UPDATE
Ausführung keine neuen Zeilen eingefügt werden ?
Wenn nein, kann ich damit rechnen, UPDATE
dass auch die nach dem Start angezeigten Zeilen aktualisiert werden? (Schlüssel hat keine DEFAULT 'value'
in seiner Definition)
postgresql
locking
Origaminal
quelle
quelle
UPDATE
auf diese Weise neu eingefügte Zeilen zu aktualisieren.Antworten:
Ein UPDATE ohne WHERE-Klausel sperrt alle Zeilen in der Tabelle, sperrt jedoch nicht die Tabelle selbst für DML.
Die Zeilen können nicht aus einer anderen Transaktion gelöscht werden, da sie gesperrt sind.
Sie können jedoch problemlos neue Zeilen einfügen (vorausgesetzt, sie verletzen keine Einschränkungen).
Jede Zeile, die nach dem UPDATE eingefügt wird, wird von der UPDATE-Anweisung nicht gesehen und daher nicht geändert.
quelle
UPDATE
ohne aussagtWHERE
.