Appearance
Kapitel 6: DML - Daten bearbeiten
DML (Data Manipulation Language) wird verwendet, um Daten in Tabellen zu manipulieren (einfügen, ändern, löschen).
DML-Befehle:
- INSERT → Daten einfügen
- UPDATE → Daten ändern
- DELETE → Daten löschenWichtig: DML ändert nur die Daten, nicht die Struktur der Tabelle!
6.1 Daten einfügen (INSERT) ⭐
1. Basis-Syntax
sql
INSERT INTO tabellen_name (feld1, feld2, ...)
VALUES (wert1, wert2, ...);Beispiel:
sql
-- Einzelnen Datensatz einfügen
INSERT INTO users (username, email, passwort)
VALUES ('max_mustermann', 'max@email.de', 'geheim123');2. Alle Felder auffüllen (Reihenfolge beachten!)
sql
-- Wenn alle Felder befüllt werden, können Spaltennamen weggelassen werden
-- ACHTUNG: Reihenfolge muss exakt der Tabellenstruktur entsprechen!
INSERT INTO users VALUES (NULL, 'lisa_schmidt', 'lisa@email.de', 'pass456', NOW(), 1);Aber besser (lesbarer):
sql
INSERT INTO users (username, email, passwort)
VALUES ('lisa_schmidt', 'lisa@email.de', 'pass456');3. Mehrere Datensätze auf einmal einfügen (Bulk Insert)
sql
INSERT INTO users (username, email, passwort)
VALUES
('user1', 'user1@email.de', 'pass1'),
('user2', 'user2@email.de', 'pass2'),
('user3', 'user3@email.de', 'pass3');Vorteile:
- ✅ Schneller als einzelne INSERTs
- ✅ Weniger Netzwerkverkehr
- ✅ Besser für große Datenmengen
4. Wichtige Hinweise
Achtung 1: Werte-Typ muss zum Feld-Typ passen!
sql
-- ❌ Falsch: Text in INT-Feld
INSERT INTO users (user_id, username) VALUES ('eins', 'test'); -- Fehler!
-- ✅ Richtig
INSERT INTO users (user_id, username) VALUES (1, 'test');Achtung 2: Strings müssen in einfache Anführungszeichen gesetzt werden!
sql
-- ❌ Falsch (doppelte Anführungszeichen)
INSERT INTO users (username) VALUES ("max"); -- Funktioniert manchmal, aber nicht empfohlen
-- ✅ Richtig
INSERT INTO users (username) VALUES ('max');Achtung 3: AUTO_INCREMENT Felder können weggelassen werden (oder NULL setzen)
sql
-- user_id ist AUTO_INCREMENT
INSERT INTO users (user_id, username, email)
VALUES (NULL, 'max', 'max@email.de'); -- user_id wird automatisch vergeben6.2 Daten ändern (UPDATE) ⭐⭐ Wichtig!
1. Basis-Syntax
sql
UPDATE tabellen_name
SET feld1 = wert1, feld2 = wert2, ...
WHERE bedingung;Beispiel:
sql
-- Benutzer mit ID 1 aktualisieren
UPDATE users
SET email = 'neue_email@email.de', passwort = 'neues_passwort'
WHERE user_id = 1;2. ⚠️ WICHTIG: WHERE-Bedingung IMMER angeben!
sql
-- ❌ GEFÄHRLICH: Ändert ALLE Datensätze!
UPDATE users SET passwort = 'neues_passwort';
-- JETZT haben ALLE Benutzer das gleiche Passwort!
-- ✅ SICHER: Nur einen bestimmten Benutzer ändern
UPDATE users SET passwort = 'neues_passwort'
WHERE user_id = 1;Tipp: Immer erst mit SELECT testen, welche Datensätze betroffen sind!
sql
-- Erst prüfen:
SELECT * FROM users WHERE email = 'alt@email.de';
-- Dann ändern:
UPDATE users SET email = 'neu@email.de'
WHERE email = 'alt@email.de';3. Mehrere Felder auf einmal ändern
sql
UPDATE users
SET
email = 'max.neu@email.de',
passwort = 'neues_sicheres_passwort',
ist_aktiv = 0
WHERE user_id = 1;4. Felder mit Berechnungen ändern
sql
-- Preis um 10% erhöhen
UPDATE products
SET preis = preis * 1.10
WHERE kategorie_id = 1;
-- Bestand verringern
UPDATE products
SET bestand = bestand - 1
WHERE produkt_id = 42;6.3 Daten löschen (DELETE) ⭐⭐ Wichtig!
1. Basis-Syntax
sql
DELETE FROM tabellen_name
WHERE bedingung;Beispiel:
sql
-- Benutzer mit ID 5 löschen
DELETE FROM users
WHERE user_id = 5;2. ⚠️ WICHTIG: WHERE-Bedingung IMMER angeben!
sql
-- ❌ KATASTROPHE: Löscht ALLE Datensätze!
DELETE FROM users;
-- ALLE Benutzer sind weg! (Kann nicht rückgängig gemacht werden!)
-- ✅ SICHER: Nur einen bestimmten Datensatz löschen
DELETE FROM users WHERE user_id = 5;3. DELETE vs TRUNCATE
| DELETE | TRUNCATE | |
|---|---|---|
| Syntax | DELETE FROM tabelle WHERE ... | TRUNCATE TABLE tabelle |
| Geschwindigkeit | Langsam (zeile für Zeile) | Sehr schnell (ganze Tabelle auf einmal) |
| WHERE | Ja (einzelne Zeilen löschen) | Nein (löscht ALLES) |
| Auto_Increment | Bleibt erhalten | Wir auf 1 zurückgesetzt |
| Rückgängig | Ja (mit TRANSACTION) | Nein |
Beispiel:
sql
-- Langsam, aber flexibel (nur bestimmte löschen)
DELETE FROM users WHERE ist_aktiv = 0;
-- Sehr schnell, aber löscht ALLES
TRUNCATE TABLE users; -- Achtung!6.4 Praxisbeispiel: Daten einfügen, ändern, löschen
Szenario: Verwalte die Benutzer einer Webseite.
Schritt 1: Tabelle erstellen
sql
CREATE DATABASE IF NOT EXISTS webseite_db;
USE webseite_db;
CREATE TABLE users (
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
passwort VARCHAR(255) NOT NULL,
ist_aktiv BOOLEAN DEFAULT 1,
erstellt_am DATETIME DEFAULT CURRENT_TIMESTAMP
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;Schritt 2: Daten einfügen (INSERT)
sql
-- Einen Benutzer einfügen
INSERT INTO users (username, email, passwort)
VALUES ('max_mustermann', 'max@email.de', 'pass123');
-- Mehrere Benutzer auf einmal einfügen
INSERT INTO users (username, email, passwort)
VALUES
('lisa_schmidt', 'lisa@email.de', 'pass456'),
('john_doe', 'john@email.de', 'pass789'),
('jane_doe', 'jane@email.de', 'pass101112');Schritt 3: Daten abfragen (Kontrolle)
sql
SELECT * FROM users;Ausgabe:
+---------+------------------+-------------------+-----------+------------+---------------------+
| user_id | username | email | passwort | ist_aktiv | erstellt_am |
+---------+------------------+-------------------+-----------+------------+---------------------+
| 1 | max_mustermann | max@email.de | pass123 | 1 | 2024-01-15 10:30:00 |
| 2 | lisa_schmidt | lisa@email.de | pass456 | 1 | 2024-01-15 10:31:00 |
| 3 | john_doe | john@email.de | pass789 | 1 | 2024-01-15 10:32:00 |
| 4 | jane_doe | jane@email.de | pass101 | 1 | 2024-01-15 10:33:00 |
+---------+------------------+-------------------+-----------+------------+---------------------+Schritt 4: Daten ändern (UPDATE)
sql
-- E-Mail von Benutzer 1 ändern
UPDATE users
SET email = 'max.neu@email.de'
WHERE user_id = 1;
-- Benutzer 3 deaktivieren
UPDATE users
SET ist_aktiv = 0
WHERE user_id = 3;Schritt 5: Daten löschen (DELETE)
sql
-- Benutzer 4 löschen
DELETE FROM users
WHERE user_id = 4;Schritt 6: Ergebnis prüfen
sql
SELECT * FROM users;Ausgabe nach Änderungen:
+---------+------------------+-------------------+-----------+------------+
| user_id | username | email | passwort | ist_aktiv |
+---------+------------------+-------------------+-----------+------------+
| 1 | max_mustermann | max.neu@email.de | pass123 | 1 |
| 2 | lisa_schmidt | lisa@email.de | pass456 | 1 |
| 3 | john_doe | john@email.de | pass789 | 0 |
+---------+------------------+-------------------+-----------+------------+Häufige Fehler für Einsteiger
Fehler 1: Datentypen stimmen nicht überein
sql
-- ❌ Falsch: Text in INT-Feld
INSERT INTO users (user_id, username) VALUES ('eins', 'test');
-- ✅ Richtig
INSERT INTO users (user_id, username) VALUES (1, 'test');Fehler 2: Strings ohne Anführungszeichen
sql
-- ❌ Falsch
INSERT INTO users (username, email) VALUES (max, max@email.de);
-- ✅ Richtig
INSERT INTO users (username, email) VALUES ('max', 'max@email.de');Fehler 3: UPDATE/DELETE ohne WHERE (Gefährlich!)
sql
-- ❌ Gefährlich! Ändert/Löscht ALLE Datensätze!
UPDATE users SET passwort = 'neu';
DELETE FROM users;
-- ✅ Sicher mit WHERE
UPDATE users SET passwort = 'neu' WHERE user_id = 1;
DELETE FROM users WHERE user_id = 1;Zusammenfassung
In diesem Kapitel hast du gelernt:
- ✅ Daten mit
INSERTeinzufügen (einzeln und mehrfach) - ✅ Daten mit
UPDATEzu ändern (immer mitWHERE!) - ✅ Daten mit
DELETEzu löschen (immer mitWHERE!) - ✅ Den Unterschied zwischen
DELETEundTRUNCATE - ✅ Häufige Anfängerfehler zu vermeiden
Übungen
- Praxis: Erstelle eine Tabelle
productsmit Feldernprodukt_id,produkt_name,preis,bestand - INSERT: Füge 5 Produkte in die Tabelle ein
- UPDATE: Erhöhe den Preis aller Produkte um 10%
- UPDATE: Setze den Bestand von Produkt 1 auf 0
- DELETE: Lösche alle Produkte mit Bestand 0
Nächstes Kapitel
Im nächsten Kapitel lernen wir DQL (Data Query Language) - wie man Daten aus Tabellen abfragt (SELECT). Das ist das Wichtigste und am häufigsten verwendete SQL!
