Änderungsanweisungen in SQL (MySQL )
Änderungsanweisungen
Eine UPDATE-Änderungsanweisung erlaubt es, eine Spalte in einer Tabelle auf einen bestimmten Wert zu setzen.
- Konsole (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE ZAHL ( I VARCHAR( 255 ), DE VARCHAR( 255 ), EN VARCHAR( 255 ) );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '0', 'NULL', 'ZERO' );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '1', 'EINS', 'ONE' );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '2', 'ZWEI', 'TWO' );
SELECT * FROM ZAHL;+------+------+------+
| I | DE | EN |
+------+------+------+
| 0 | NULL | ZERO |
| 1 | EINS | ONE |
| 2 | ZWEI | TWO |
+------+------+------+UPDATE ZAHL SET DE = 'HAUS';
Rows matched: 3 Changed: 3 Warnings: 0
SELECT * FROM ZAHL;
+------+------+------+
| I | DE | EN |
+------+------+------+
| 0 | HAUS | ZERO |
| 1 | HAUS | ONE |
| 2 | HAUS | TWO |
+------+------+------+UPDATE ZAHL SET DE = EN;
SELECT * FROM ZAHL;
+------+------+------+
| I | DE | EN |
+------+------+------+
| 0 | ZERO | ZERO |
| 1 | ONE | ONE |
| 2 | TWO | TWO |
+------+------+------+
Hinter »=« kann ein Ausdruck stehen (sowohl in einer SET-Klausel als auch in einer WHERE-Klausel). Ein Ausdruck ist ein Spaltenname oder ein Zeichenfolgenliteral (also ein Text zwischen Apostrophen). Der Spaltenname steht für den Inhalt der Spalte (in der betreffenden Zeile), ein Zeichenfolgenliteral steht für den wörtlichen Text zwischen den Apostrophen.
Eingeschränkte Änderungsanweisungen
Wir hatten kürzlich die WHERE-Klausel der SELECT-Abfrage kennengelernt. Eine solche WHERE-Klausel kann auch für eine UPDATE-Änderungsanweisung zur Einschränkung der Änderung auf bestimmte Zeilen verwendet werden.
- Konsole (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE ZAHL ( I INT, DE VARCHAR( 255 ), EN VARCHAR( 255 ) );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '0', 'NULL', 'ZERO' );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '1', 'EINS', 'ONE' );
INSERT INTO ZAHL ( I, DE, EN ) VALUES ( '2', 'ZWEI', 'TWO' );
SELECT * FROM ZAHL;+------+------+------+
| I | DE | EN |
+------+------+------+
| 0 | NULL | ZERO |
| 1 | EINS | ONE |
| 2 | ZWEI | TWO |
+------+------+------+SELECT * FROM ZAHL WHERE I = '2';
+------+------+------+
| I | DE | EN |
+------+------+------+
| 2 | ZWEI | TWO |
+------+------+------+UPDATE ZAHL SET DE = 'ZWO' WHERE I = '2';
SELECT * FROM ZAHL;
+------+------+------+
| I | DE | EN |
+------+------+------+
| 0 | NULL | ZERO |
| 1 | EINS | ONE |
| 2 | ZWO | TWO |
+------+------+------+
Die WHERE-Klausel kann – wie bei einer SELECT-Abfrage – auch komplizierter sein als in diesem Beispiel. Falls sie auf mehrere Zeilen zutrifft, so werden alle diese Zeilen entsprechend der SET-Klausel geändert. Um zu vermeiden, daß unabsichtlich mehr als eine Zeile verändert wird, ist es am besten, falls möglich, zuerst einmal die richtige Zeile zu identifizeren und dann eine eindeutige WHERE-Klausel zu verwenden. Vor einer Änderungsabfrage kann die WHERE-Klausel auch erst einmal mit einer SELECT-Abfrage geprüft werden, wie oben auch zu sehen ist.
Man beachte, daß das Gleichheitszeichen »=« hinter »SET« eine etwas andere Bedeutung hat als das Gleichheitszeichen hinter »WHERE«. Hinter »WHERE« wird es verwendet, um eine Aussage über eine Gleichheit zu formen, die wahr oder falsch sein kann. Hinter »SET« wird es verwendet, um eine Anweisung zu formulieren, deren Umsetzung eine Änderung in einer Spalte der Tabelle bewirkt. Die Verbindung zwischen beidem besteht darin, daß direkt nach einer durch »SET DE = 'ZWO'« bewirkten Änderung einer Zelle die Aussage in »WHERE DE = 'ZWO'« für jene Zelle wahr ist.
Übungsaufgabe
Ändern Sie nach der Eingabe der folgenden Anweisungen einige Bezeichnungen aus der Tabelle mit Hilfe von UPDATE-Anweisungen in die heute üblichen Bezeichnungen.
- Skript (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE BEZEICHNUNG ( I VARCHAR ( 255 ), BEZEICHNUNG VARCHAR ( 255 ));
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( '0', 'Lehrter Stadtbahnhof' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( '1', 'Bundesgrenzschutz' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( '2', 'Karl-Marx-Stadt' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( '3', 'Zaire' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( '4', 'Grand Prix Eurovision de la Chanson Européenne' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( '5', 'Rhodesien' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( '6', 'Cassius Clay' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( '7', 'Arbeitsamt' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( '8', 'Ceylon' );
INSERT INTO BEZEICHNUNG ( I, BEZEICHNUNG ) VALUES ( '9', 'Dahomey' );SELECT * FROM BEZEICHNUNG;
- Aussprache
- Grand Prix Eurovision de la Chanson Européenne gʀãː pʀiː ø ʁo vi zjɔ̃ də la ʃɑ̃ sɔ̃ ø ʁɔ pe ɛn
Zitate *
Datenänderungsanweisungen *
- 4.33.2.3 SQL-data change statements (gekürzt) *
- The following are the SQL-data change statements:
- — <insert statement>.
- — <update statement: searched>.
Mehrere Spalten mit einer UPDATE-Anweisung ändern *
Es ist auch möglich, mehreren Spalten einen bestimmten Wert zu geben.
- Konsole (MySQL )
UPDATE ZAHL SET DE = 'ZEIT', EN = 'TIME';
Rows matched: 3 Changed: 3 Warnings: 0
SELECT * FROM ZAHL;
+------+------+------+
| I | DE | EN |
+------+------+------+
| 0 | ZEIT | TIME |
| 1 | ZEIT | TIME |
| 2 | ZEIT | TIME |
+------+------+------+