Zum Inhalt springen

Update (SQL)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 11. August 2018 um 12:20 Uhr durch Hundsrose (Diskussion | Beiträge) (Tippfehler korrigiert). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Dieser Importartikel ist fälschlicherweise im Artikelnamensraum. Bitte verschiebe die Seite oder entferne diesen Baustein.
Dieser Artikel (Update (SQL)) ist im Entstehen begriffen und noch nicht Bestandteil der freien Enzyklopädie Wikipedia.
Wenn du dies liest:
  • Der Text kann teilweise in einer Fremdsprache verfasst, unvollständig sein oder noch ungeprüfte Aussagen enthalten.
  • Wenn du Fragen zum Thema hast, nimm am besten Kontakt mit den Autoren auf.
Wenn du diesen Artikel überarbeitest:
  • Bitte denke daran, die Angaben im Artikel durch geeignete Quellen zu belegen und zu prüfen, ob er auch anderweitig den Richtlinien der Wikipedia entspricht (siehe Wikipedia:Artikel).
  • Nach erfolgter Übersetzung kannst du diese Vorlage entfernen und den Artikel in den Artikelnamensraum verschieben. Die entstehende Weiterleitung kannst du schnelllöschen lassen.
  • Importe inaktiver Accounts, die länger als drei Monate völlig unbearbeitet sind, werden gelöscht.

Die UPDATE-Anweisung in SQL ändert den Inhalt der Einträge einer Tabelle. Die Anweisung ändert dabei alle Zeilen einer Tabelle oder wählt basierend auf einer zusätzlichen Bedingung eine Teilmenge der Tabelle aus.

Die UPDATE-Anweisung definiert sich über die Spaltenänderung einer Tabelle (SET) in Verbindung mit einer optionalen WHERE-Bedingung:[1]

UPDATE Tabellenname SET Spaltenname = Wert [, Spaltenname = Wert ...] [WHERE Bedingung]

Die Verwendung der UPDATE-Anweisung beschränkt sich auf Benutzer mit Berechtigung zur Datenänderung ((UPDATE-Berechtigung) der entsprechenden Tabelle oder Spalte.

Die zu ändernden Werte unterliegen den Einschränkungen für Primär(schlüssel), CHECK und NOT NULL.

In some databases, such as PostgreSQL, when a FROM clause is present, what essentially happens is that the target table is joined to the tables mentioned in the fromlist, and each output row of the join represents an update operation for the target table. When using FROM, one should ensure that the join produces at most one output row for each row to be modified. In other words, a target row shouldn't join to more than one row from the other table(s). If it does, then only one of the join rows will be used to update the target row, but which one will be used is not readily predictable.[2]

Because of this indeterminacy, referencing other tables only within sub-selects is safer, though often harder to read and slower than using a join.

MySQL does not conform to ANSI standard. [1]

Beispiele

Die Spalte C1 der Tabelle T nimmt in allen Zeilen mit Wert "a" in Spalte C2 den Wert 1 an:

UPDATE T
   SET C1 = 1
 WHERE C2 = 'a'

Für alle Zeilen mit Wert "a" in Spalte C2 nimmt Spalte C1 den Wert 9 und Spalte C3 den Wert 4 an:

UPDATE T
   SET C1 = 9,
       C3 = 4
 WHERE C2 = 'a'

Erhöhe den Wert der Spalte C1 um 1 für alle Zeilen mit Wert "a" in Spalte C2:

UPDATE T
   SET C1 = C1 + 1
 WHERE C2 = 'a'

Positionierung des Strings "Text" vor dem Wert von Spalte C1, falls die Spalte C2 den Wert "a" enthält:

UPDATE T
   SET C1 = 'Text' || C1
 WHERE C2 = 'a'

Setze den Wert der Spalte C1 der Tabelle T1 auf 2 sofern die Spalte C2 einen Wert aus der Unterliste der WHERE-Bedingung enthält. Die Unterliste wählt dabei diejenigen Werte der Spalte C3 der Tabelle T2 aus, bei denen die Spalte C4 den Wert 0 aufweist:

UPDATE T1
   SET C1 = 2
 WHERE C2 IN ( SELECT C3
                 FROM T2
                WHERE C4 = 0)

Festlegen von Werten mehrerer Spalten in einer einzigen Anweisung:

UPDATE T
   SET C1 = 1,
       C2 = 2

Mehrere WHERE-Bedingungen:

UPDATE T
   SET A = 1
 WHERE C1 = 1
   AND C2 = 2

Die UPDATE-Anweisung erlaubt außerdem Joins, in manchen Datenbanksystemen sogar eine im FROM-Teil abweichende Notation des SQL-Standards:

UPDATE a
   SET a.[updated_column] = updatevalue
  FROM articles a
       JOIN classification c
         ON a.articleID = c.articleID
 WHERE c.classID = 1

Das Datenbanksystem von Oracle stellt (bei vorhandenem Index für articleID) eine weitere Notation zu Verfügung:

UPDATE
(
  SELECT *
    FROM articles
    JOIN classification
      ON articles.articleID = classification.articleID
   WHERE classification.classID = 1
)
SET [updated_column] = updatevalue

Risiken

  • Halloween-Problem : In manchen Update-Anweisungen verursachen die verknüpften Indizes von SET-Definitionen und WHERE-Bedingungen (Endlos)schleifen.
  • Eine Update-Anweisung mit fehlender WHERE-Bedingung wirkt auf alle Einträge der ausgewählten Spalten.

Siehe auch

Data Manipulation Language (DML)

Einzelnachweise

  1. http://dev.mysql.com/doc/refman/5.0/en/update.html Vereinfacht und übersetzt
  2. http://www.postgresql.org/docs/8.1/static/sql-update.html