Veränderung des Datenbestands

Theorie Icon Der Inhalt einer angelegten Tabelle kann jederzeit ergänzt und verändert werden. Hierzu existieren drei Anweisungen, mit denen neue Daten eingefügt (INSERT), bestehende Daten verändert (UPDATE) und auch gelöscht (DELETE) werden können.

INSERT

Mit der Anweisung INSERT INTO können Zeilen in die Tabelle eingefügt werden. Der Anweisung werden die Tabellennamen sowie die Spaltenbezeichnungen übergeben, die von der Operation betroffen sind. Entsprechend diesem Schema werden auch die Werte hinter VALUES eingegeben, um welche die Tabelle ergänzt werden soll. Das allgemeine SQL-Statement hierfür lautet:

  • 
    INSERT INTO TabellenName (Spalte1, Spalte2, ...)
    VALUES (Wert1, Wert2, ...);
    

Die Angabe der Spaltenbezeichnungen (Spalte1, Spalte2, ...) ist nicht zwingend erforderlich und wird eher dann gebraucht, wenn für das Anlegen eines neuen Eintrages die Wertangaben (Wert1, Wert2, ...) unvollständig sind. In dem Fall würde man die Spaltenbezeichnungen spezifizieren, für die die Werte mitgegeben werden.

UPDATE

Die UPDATE-Anweisung dient dazu, die Daten in der Datenbank zu ändern. Mithilfe der WHERE - Klausel kann angegeben werden, welche Zeilen verändert werden sollen. Falls nur eine einzelne Zeile von Interesse ist, kann dies über eine ID (z. B. die S_Nr einer/s Schüler:in) geschehen. Die tatsächliche Änderung der jeweiligen Tabellenspalte wird mit SET angegeben. Der Befehl lautet:

  • 
    UPDATE TabellenName
    SET Spalte1 = Wert1, Spalte2 = Wert2, ...
    WHERE Bedingung;
    

DELETE

Die Anweisung DELETE wird zum Löschen von Zeilen einer Tabelle genutzt. Dazu wird ebenfalls über WHERE angegeben, für welche Zeile(n) dies erfolgen soll. Die Notation dafür lautet:

  • 
    DELETE FROM TabellenName 
    WHERE Bedingung;
    

Allerdings birgt das DELETE bei unachtsamen Gebrauch einige Risiken und kann dazu führen, dass die Daten inkonsistent werden, indem bspw. ein Eintrag gelöscht wird, den ein anderer Eintrag noch referenziert. Um diese Situationen zu vermeiden, werden an die Datenbank zusätzliche Bedingungen zur Erhaltung der Vollständigkeit und Konsistenz gestellt, die sich unter dem Begriff Referentielle Integrität zusammenfassen lassen.

Ein Beispiel, bei dem die Referentielle Integrität nicht berücksichtigt wird, ist im Folgenden abgebildet. Hier wurde der Eintrag (5, Fotografie) gelöscht, welcher jedoch noch referenziert wird. Das führt dazu, dass der Fremdschlüssel 5 im Eintrag (3, Carolin, 5) auf einen nicht existierenden Eintrag verweist:

Vor dem DELETE-Befehl
Nach dem DELETE-Befehl
S_NrNameGTA_Nr
1Katrin2
3Carolin5
GTA_NrBeschreibung
2Tastaturschreiben
5Fotografie
S_NrNameGTA_Nr
1Katrin2
3Carolin5
GTA_NrBeschreibung
2Tastaturschreiben

Zur Erhaltung der Referentiellen Integrität beim Löschen gibt es die folgenden Möglichkeiten

  • Löschweitergabe (Kaskadierendes Löschen): Das Löschen eines Eintrages hat auch das Löschen aller Einträge zur Folge, die diesen referenzieren
  • Änderungsweitergabe (SET NULL oder SET DEFAULT): In den Zeilen, die mittels Fremdschlüsselattributes auf den zu löschenden Eintrag verweisen, wird als Attributwert des Fremdschlüssels NULL bzw. der Standardwert des Attributs eingetragen.
  • RESTRICT oder NO ACTION: Die Löschung der Zeile wird nicht ausgeführt, wenn andere Datensätze noch auf diese verweisen.

Die Operatoren am Beispiel

Zum besseren Verständnis sind nachfolgend einige Beispiele abgebildet, die illustrieren sollen, wie mit den eben vorgestellten Anweisungen gearbeitet werden kann.

  • Ein Schüler (S_Nr = 2) wählt ein bestimmtes GTA (GTA_Nr = 4), weswegen die GTA_Nr des Schülers geändert wird:
    
    UPDATE Schueler
    SET GTA_Nr = 4
    WHERE S_Nr = 2;
    
    
  • Die Schule hat einen neuen Schüler bekommen, der allerdings noch kein GTA ausgewählt hat. Dieser wird mit folgenden Werten in der Datenbank eingefügt:
    (S_Nr = 4, Nachname = Freud, Vorname = Philipp, Klassenstufe = 10)
    
    INSERT INTO Schueler (S_Nr, Nachname, Vorname, Klassenstufe)
    VALUES (4, 'Freud', 'Philipp', 10);
    
    
  • Ein Schüler (S_Nr = 4) macht seinen Abschluss und wird daher aus der Datenbank der Schule entfernt:
    
    DELETE FROM Schueler 
    WHERE S_NR = 4;
    
    
Schon gewusst?

In der Praxis kann es auch vorkommen, dass beim INSERT INTO die ID (in diesem Fall die S_Nr) nicht explizit angegeben, sondern von der Datenbank automatisch vergeben wird, sobald man ein neues Objekt einfügt. In so einem Fall handelt es sich bei der Spalte meist um ein automatisch inkrementierendes (in SQL: AUTO_INCREMENT) Feld.

Im Fall des Schülers würde es also so aussehen:


INSERT INTO Schueler (Nachname, Vorname, Klassenstufe, GTA_id)
VALUES ('Freud', 'Philipp', 10, 2);