Q2 Datenbanken

SQL Lektion 6: INSERT, UPDATE, DELETE

Lösung geprüft

Die Aufgabe der heutigen Stunde ist die sechste SQL-Lektion: DML, also Data Manipulation Language. Bis jetzt haben wir nur gelesen. Jetzt schreiben wir – einfügen, ändern, löschen und Tabellen anlegen. Ab hier kann man auch echt was kaputt machen.

Die Aufgabenstellung lautet

a) Bearbeiten Sie die sechste Lektion und erstellen Sie in ihrem OneNote-Heft eine kompakte übersichtliche Kurzzusammenfassung der SQL-Befehle.
b) Bearbeiten Sie die Übung 6

Zusatzaufgabe

Teil b) der Aufgabe – Bearbeiten Sie die Übung 6 – liegt auf der Tutorial-Seite und ist im OneNote nicht abgedruckt. Hier stehen die Zusammenfassung und die Zusatzaufgabe.

Die vier Befehle

SQL
/* meininfokurs.cmrg.site */
-- Zusammenfassung der sechsten SQL-Lektion: DML
-- @meininfokurs.cmrg.site

-- INSERT: neue Zeile einfuegen
INSERT INTO tabellen_name VALUES ('x', 'y', 'z');

-- Besser: mit Spaltennamen, dann ist die Reihenfolge egal
INSERT INTO kurse (id, name, raum) VALUES (12, 'Informatik GK', 'B204');

-- UPDATE: vorhandene Zeilen aendern
UPDATE kurse
SET    raum = 'C101'
WHERE  id = 12;

-- DELETE: Zeilen loeschen
DELETE FROM kurse
WHERE  id = 12;

-- CREATE TABLE: neue Tabelle anlegen
CREATE TABLE kurse (
    id      INT          NOT NULL,
    name    VARCHAR(50)  NOT NULL,
    raum    VARCHAR(10),
    beginn  DATE,
    typ     ENUM('GK', 'LK'),
    PRIMARY KEY (id)
);

Die Datentypen

TypWofürBeispiel
INT(n)ganze Zahlenid INT
VARCHAR(n)Text bis n Zeichenname VARCHAR(50)
DATEDatum im Format JJJJ-MM-TT'2026-09-17'
ENUM(…)feste Auswahl an WertenENUM('GK','LK')

ENUM ist genau dasselbe Prinzip wie das enum in Java bei der Klasse Termin: eine feste, begrenzte Auswahl. Schreibt man etwas anderes hinein, lehnt die Datenbank es ab, statt es stillschweigend zu speichern.

Bei VARCHAR gibt die Zahl die Höchstlänge an. Zu knapp gewählt, und lange Namen werden abgeschnitten – bei VARCHAR(10) passt „Informatik GK" schon nicht mehr rein.

Das WHERE bei UPDATE und DELETE

DELETE FROM kurse;            -- loescht ALLE Kurse. Ohne Nachfrage.
UPDATE kurse SET raum = 'C101';  -- setzt ALLE Kurse auf C101.

Das ist der Befehl, mit dem man sich richtig Ärger einhandelt. Ein vergessenes WHERE ist syntaktisch völlig korrekt – die Datenbank fragt nicht nach und es gibt kein Rückgängig.

Angewöhnen kann man sich das hier: schreib die Anweisung erst als SELECT und schau dir an, welche Zeilen betroffen wären.

-- 1. Erst gucken, was getroffen wird
SELECT * FROM kurse WHERE id = 12;

-- 2. Wenn das stimmt, dasselbe WHERE fuers Loeschen benutzen
DELETE FROM kurse WHERE id = 12;

Die Zusatzaufgabe

Die Kurs-Datenbank aus Übung 6 ist im OneNote nicht abgedruckt. Ich rechne mit kurse(id, name), teilnehmer(id, vorname, nachname) und der Verknüpfungstabelle kurs_hat_teilnehmer(kurs_id, teilnehmer_id). Namen gegebenenfalls anpassen.

Schritt 1 – Einen neuen Kurs erzeugen

INSERT INTO kurse (id, name) VALUES (12, 'Informatik GK Q2');

Schritt 2 – Zwei Teilnehmer hinzufügen

-- Erst die Personen selbst, falls es sie noch nicht gibt
INSERT INTO teilnehmer (id, vorname, nachname) VALUES (101, 'Anna', 'Berger');
INSERT INTO teilnehmer (id, vorname, nachname) VALUES (102, 'Ben',  'Klein');

-- Dann die Zuordnung zum Kurs
INSERT INTO kurs_hat_teilnehmer (kurs_id, teilnehmer_id) VALUES (12, 101);
INSERT INTO kurs_hat_teilnehmer (kurs_id, teilnehmer_id) VALUES (12, 102);

Genau hier zahlt sich das Kapitel über Eltern- und Kindtabellen aus. Die Reihenfolge ist nicht beliebig: erst der Kurs und die Teilnehmer, dann die Zuordnung. Wer zuerst in kurs_hat_teilnehmer schreibt, bekommt einen Fremdschlüsselfehler, weil es Kurs 12 noch gar nicht gibt.

Schritt 3 – Den Kurs löschen

-- Erst die Zuordnungen, sonst verweisen sie ins Leere
DELETE FROM kurs_hat_teilnehmer WHERE kurs_id = 12;

-- Dann den Kurs selbst
DELETE FROM kurse WHERE id = 12;

Beim Löschen ist die Reihenfolge genau umgekehrt zum Einfügen: von innen nach außen, vom Kind zum Elternteil. Versucht man zuerst den Kurs zu löschen, verhindert die referenzielle Integrität das – es gibt ja noch Zeilen, die auf ihn zeigen.

Und die Teilnehmer bleiben stehen. Der Kurs wurde gestrichen, die Personen gibt es aber weiterhin und sie sind vermutlich in anderen Kursen. Das war in der Aufgabe auch nicht gefordert.

Man kann beim CREATE TABLE auch ON DELETE CASCADE angeben – dann räumt die Datenbank die Kindzeilen von selbst mit weg. Bequem, aber gefährlich: ein DELETE löscht dann unter Umständen viel mehr, als man wollte.

Aufgabe suchen

Tippe los. Strg+K öffnet die Suche von überall.

Zuletzt angesehen

Werbung