Dies ist eine alte Version des Dokuments!
LU07b – Einführung & INSERT
Lernziele
- Ich kann Daten einfügen (INSERT).
- Ich erkenne typische Fehlerquellen (falsche Datentypen, Schlüsselverletzungen).
Einführung
In LU05 haben wir die DDL (Data Definition Language) kennengelernt, mit der Tabellen angelegt werden.
Folgender SQL-Code erzeugt eine leere Tabelle favourite_film mit den Spalten film_id1), title2), director3), released_year4), star15):
CREATE TABLE favourite_film ( film_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(100), director VARCHAR(50), released_year YEAR, star1 VARCHAR(50) );
Wichtig: film_id ist der Primärschlüssel → jeder Datensatz erhält automatisch eine eindeutige ID.
DML = Data Manipulation Language: INSERT, UPDATE, DELETE. (Read erfolgt mit SELECT und gehört streng genommen zur DQL, wird im Alltag bei CRUD aber mitgemeint.)
Bisher haben wir neue Datensätze über die Webstorm-Oberfläche eingefügt (Edit Data > „+“):
Das funktioniert, ist aber mühsam und fehleranfällig, wenn viele Daten eingetragen oder geändert werden müssen. Darum machen wir das ab jetzt programmatisch mit SQL.
Die CRUD-Operationen aus der vorherigen Lektion setzen wir dabei direkt mit den Befehlen der DML (Data Manipulation Language) um: INSERT entspricht Create, SELECT entspricht Read, UPDATE entspricht Update und DELETE entspricht Delete.
INSERT – Daten einfügen
Syntax (allgemein: Einzelzeile)
INSERT INTO tabellenname (spalte1, spalte2, spalte3) VALUES (wert1, wert2, wert3);
Variante A: Spalten explizit angeben
INSERT INTO favourite_film (title, director, released_year, star1) VALUES ('Lost in Translation', 'Sofia Coppola', 2003, 'Scarlett Johansson');
film_id | title | director | released_year | star1 |
---|---|---|---|---|
1 | Lost in Translation | Sofia Coppola | 2003 | Scarlett Johansson |
Variante B: Mehrere Zeilen auf einmal
INSERT INTO favourite_film (title, director, released_year, star1) VALUES ('Inception', 'Christopher Nolan', 2010, 'Leonardo DiCaprio'), ('Arrival', 'Denis Villeneuve', 2016, 'Amy Adams');
film_id | title | director | released_year | star1 |
---|---|---|---|---|
1 | Lost in Translation | Sofia Coppola | 2003 | Scarlett Johansson |
2 | Inception | Christopher Nolan | 2010 | Leonardo DiCaprio |
3 | Arrival | Denis Villeneuve | 2016 | Amy Adams |
Variante C: INSERT … SELECT (Daten aus einer anderen Tabelle übernehmen)
INSERT INTO favourite_film (title, director, released_year, star1) SELECT Series_Title, Director, Released_Year, Star1 FROM imdb_top_1000 WHERE Released_Year >= 2000;
Hinweis: Mit der WHERE-Bedingung können gezielt nur bestimmte Datensätze übernommen werden.