Author: Progman, zuletzt bearbeitet von progman @ 2004/06/18 13:12:50
Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.
Datensätze in der Tabellen ändern
1. Ändern von Werten
Wir wissen jetzt wie wir eine Tabelle mit Datensätzen füllen und wie wir diese Datensätze auslesen können. Doch vielleicht möchten wir ja in einem Adminbereich z.B. die Newsbeiträge bearbeiten, weil sich da ein Fehler eingeschlichen hat oder so. Um Datensätze in einer Tabelle zu bearbeiten benutzen wir den MySQL Befehl UPDATE.
2. Syntax von UPDATE
Die Syntax von UPDATE sieht wie folgt aus.
UPDATE tabelle SET spaltendefinition;
Da wo jetzt tabelle steht fügen wir dann den Namen der Tabelle ein, in der wir die Datensätze bearbeiten wollen.
UPDATE News SET spaltendefinition;
Bei spaltendefinition kommen dann die Spaltennamen und die dazugehörigen Werte. Die Spalten und Werte werden dabei so angegebene.
spalte = 'wert'
Wenn man mehrere Spalten gleichzeitig bearbeiten möchte, muss man jedes spalte = wert mit einem Komma trennen.
spalte = 'wert', spalte2 = 'foo', spalte3 = 'bla'
Ein Beispiel UPDATE-Befehl könnte dann so aussehen.
UPDATE News SET Autor = 'Progman', Datum = NOW();
Zur besseren Übersicht sollte man hinter jedem Komma ein Zeilenumbruch machen. Dann sieht man sofort welche und wieviele Spalten bearbeitet werden.
UPDATE News SET Autor = 'Progman', Datum = NOW();
Statt einen festen Ausdruck oder den Rückgabewert einer Funktion kann man auch andere Werte speichern. Man kann z.B. noch auf den alten Spaltenwert zugreifen und mit denen z.B. rechnen. Dies würde dann so aussehen.
UPDATE Counter SET Hits = Hits + 1;
Dies erhöht z.B. den Counter um 1. Hier spart man sich den Weg über PHP mit SELECT, dann $var++ und dann wieder zurückschreiben.
3. Die WHERE Bedingung
Ich greif das Beispiel mit den News nochmal auf.
UPDATE News SET Autor = 'Progman', Datum = NOW();
Dieser UPDATE-Befehl verändert nun die Werte der Spalten Autor und Datum mit den angegebenen Werten. Doch im welchem Datensatz?
So wie es jetzt da steht wird jeder Datensatz in dieser Tabelle bearbeitet. Nach diesem Befehl haben alle Datensätze in dieser Tabelle in der Spalte Autor den Wert Progman und in der Spalte Datum das aktuelle Datum gespeichert. Nun, das wollen wir aber nicht. Wir wollen nur einen ganz bestimmten Datensatz oder nur bestimmte Datensätze bearbeiten. Welche Datensätze wir mit diesem UPDATE-Befehl bearbeiten wollen geben wir mit der WHERE-Bedingung an. Die WHERE-Bedingung wird dann hinter dem UPDATE Befehl angehängt.
UPDATE News SET Autor = 'Progman', Datum = NOW() WHERE ID = '5';
Dieser UPDATE-Befehl z.B. bearbeitet nur den Datensatz, in der der Wert der Spalte ID den Wert 5 hat. MySQL bearbeitet nur die Datensätze wo diese Bedingung zutrifft. Er geht also jeden Datensatz durch und guckt sich die Bedingung an.
Statt ein einfacher Vergleich kann auch ein komplexer Ausdruck stehen. Bedingungen können mit AND, OR und NOT zusammengebaut werden, wie man es bei der If-Abfrage in PHP kennt.
Diese WHERE-Bedingung kann auch bei SELECT und DELETE FROM verwendet werden wenn man nur bestimmte Datensätze auslesen möchte oder nur bestimmte Datensätze löschen will (zum Löschen von Datensätzen kommen wir später). Bei dem INSERT Befehl kann man keine WHERE-Bedingung benutzen, macht ja auch kein Sinn.
Fragen zum aktuellen Thema
- Wie werden die Spaltennamen mit den Werten untereinander getrennt?
- Wo kann überall eine WHERE-Bedingung benutzt werden
- Wie werden die Spaltennamen mit den Werten untereinander getrennt?
-
Jedes Paar von Spaltenname und Wert (spalte = 'wert') muss mit einem Komma getrennt werden. Hinter dem letzen Paar von Spaltennamen und Wert kommt kein Komma hin.
- Wo kann überall eine WHERE-Bedingung benutzt werden
-
Eine WHERE-Bedingung kann in einem SELECT, UPDATE oder DELETE FROM Befehl benutzt werden. In einem INSERT-Befehl macht dies kein Sinn und wir auch deshalb als Fehler deklariert wenn so eine WHERE-Bedingung im INSERT-Befehl vorkommt.