Skript: Datenbanken und SQL mit der Warenautomat-Datenbank
8. INSERT INTO
Sobald die Tabellen definiert sind, können sie mit echten Daten gefüllt werden. INSERT INTO beginnt also dort, wo das Schema fertig ist.
INSERT INTO gehört zur DML (Data Manipulation Language), weil damit Dateninhalte in Tabellen eingefügt und verändert werden.
8.1 Einfügen einzelner Datensätze
Mit INSERT INTO fügt man neue Zeilen (Tupel) in eine Tabelle ein. Die sicherste Form ist das Einfügen mit expliziter Spaltenliste, weil dann die Reihenfolge klar ist und spätere Tabellenänderungen weniger Fehler verursachen.
Empfohlene Grundform:
INSERT INTO tabelle (spalte1, spalte2, spalte3)
VALUES (wert1, wert2, wert3);
Warum mit Spaltenliste?
- Die Zuordnung ist eindeutig.
- Nicht benötigte Spalten können durch
DEFAULToderNULLbelegt werden. - Fehler bei geänderter Spaltenreihenfolge werden vermieden.
Alternativ kann auch die Kurzform genutzt werden:
INSERT INTO tabelle
VALUES (wert1, wert2, wert3);
Hier müssen dann alle Spalten in der richtigen Reihenfolge angegeben werden, auch wenn sie nicht befüllt werden soll (NULL eintragen!)
8.2 Mehrere Datensätze auf einmal
Mehrere Zeilen können mit einem einzigen INSERT eingefügt werden. Das ist übersichtlicher und oft schneller als viele einzelne Statements.
[!NOTE] Beispiel:
INSERT INTO standort (bezeichnung, strasse, hausnummer, plz, ort, land) VALUES ('Campus Mitte', 'Hauptstraße', '1', '78000', 'Villingen-Schwenningen', 'Deutschland'), ('Bahnhof Süd', 'Bahnhofsallee', '8', '78050', 'Villingen-Schwenningen', 'Deutschland');
8.3 Häufige Fehlerquellen bei INSERT
Beim Einfügen treten besonders oft folgende Fehler auf:
- Falsche Spaltenreihenfolge: Werte stehen in anderer Reihenfolge als die Spaltenliste oder es wird ohne Spaltenliste gearbeitet.
NOT NULLverletzt: Für ein Pflichtfeld wird kein Wert gesetzt.- Fremdschlüsselverletzung: Ein FK-Wert verweist auf keinen vorhandenen Datensatz in der Referenztabelle.
UNIQUEverletzt: Ein Wert, der eindeutig sein muss (z. B. Seriennummer), wird doppelt eingefügt.CHECKverletzt: Ein Wert passt nicht zur inhaltlichen Regel (z. B. negativer Preis).- Datentyp-Konflikt: Ein Text wird in eine Zahlenspalte geschrieben oder ein Datum hat falsches Format.
[!IMPORTANT] Mini-Beispiele:
-- FK-Fehler: lieferant_id 999 existiert nicht INSERT INTO produkt (name, preis_eur, lieferant_id) VALUES ('Riegel XL', 1.99, 999); -- CHECK-Fehler: Preis darf nicht negativ sein INSERT INTO produkt (name, preis_eur, lieferant_id) VALUES ('Riegel Minus', -1.00, 1);
8.4 Insert-Strategien in der Praxis
Beim Befüllen mehrerer Tabellen hilft ein fester Ablauf:
- Stammdaten zuerst einfügen:
Zuerst Tabellen ohne abhängige Fremdschlüssel, z. B.
standort,lieferant,mitarbeiter. - Abhängige Tabellen danach:
Dann Tabellen mit FK-Bezug, z. B.
automat,produkt. - Beziehungstabellen zuletzt:
Tabellen wie
inventaroderautomat_mitarbeitererst einfügen, wenn beide Seiten vorhanden sind. - Immer Spaltenliste verwenden: Erhöht Lesbarkeit und reduziert Zuordnungsfehler.
- Sinnvolle Transaktionsblöcke nutzen: Größere Importvorgänge möglichst zusammenfassen, damit bei Fehlern sauber zurückgerollt werden kann.
Merksatz: “Eltern zuerst, Kinder danach, Beziehungen zuletzt.”
Querverweise
Übungen zum Kapitel
Übung 1: Füge einen neuen Lieferanten ein.
Lösung
**Lösung:** ```sql INSERT INTO lieferant (name, ansprechpartner, email, telefon) VALUES ('Muster Service GmbH', 'Eva Keller', 'eva.keller@muster.de', '+49-700-123456'); ```Übung 2: Füge zwei neue Standorte ein.
Lösung
**Lösung:** ```sql INSERT INTO standort (bezeichnung, strasse, hausnummer, plz, ort, land) VALUES ('Campus Mitte', 'Hauptstraße', '1', '78000', 'Villingen-Schwenningen', 'Deutschland'), ('Bahnhof Süd', 'Bahnhofsallee', '8', '78050', 'Villingen-Schwenningen', 'Deutschland'); ```Übung 3: Welche Spalten sollten beim Einfügen eines Automaten auf jeden Fall angegeben werden und warum?
Lösung
**Lösung:** Mindestens `seriennummer`, `modell` und `standort_id`, weil diese Informationen den Automaten inhaltlich beschreiben und `standort_id` die referenzielle Zuordnung zum Standort sicherstellt.Übung 4: Nenne zwei typische INSERT-Fehler und jeweils eine passende Gegenmaßnahme.
Lösung
**Lösung:** - Fehler: Falsche Spaltenreihenfolge. Gegenmaßnahme: Immer mit expliziter Spaltenliste arbeiten. - Fehler: FK-Verletzung. Gegenmaßnahme: Referenzdatensatz zuerst einfügen und FK-Wert vor dem Insert prüfen.Übung 5: In welcher Reihenfolge würdest du lieferant, produkt und inventar befüllen?