Appearance
Kapitel 19: MySQL Interviewfragen ⭐⭐
In diesem Kapitel lernst du die häufigsten Interviewfragen zu MySQL!
19.1 Grundlegende Konzeptfragen
Frage 1: Was ist MySQL?
Antwort (eigenen Worte):
MySQL ist ein Open-Source-Relationship-Datenbankmanagementsystem (RDBMS). Es wird verwendet, um Daten in Tabellen zu speichern, zu verwalten und abzufragen. MySQL ist besonders beliebt für Webentwicklung, da es gut mit PHP, Java, Python usw. zusammenarbeitet.
Frage 2: Was sind die Kernvorteile von MySQL?
Antwort:
- Open Source & Kostenlos
- Plattformübergreifend (Windows, Linux, Mac)
- Hohe Leistung (auch bei großen Datenmengen)
- Sicher (Zugriffskontrolle, Verschlüsselung)
- Einfach zu lernen (intuitive SQL-Syntax)
Frage 3: Welche Datentypen haben Sie verwendet?
Antwort:
- Ganzzahlen:
INT(4 Byte),BIGINT(8 Byte) - Dezimalzahlen:
DECIMAL(m,d)(für Geldbeträge!),FLOAT,DOUBLE - Zeichenkette:
VARCHAR(n)(variabel),CHAR(n)(fest) - Datum/Zeit:
DATE,DATETIME,TIMESTAMP - Text:
TEXT(für lange Texte) - Boolean:
BOOLEAN/TINYINT(1)
⚠️ Wichtig: Für Geldbeträge niemals FLOAT/DOUBLE verwenden (Rundungsfehler!) → DECIMAL verwenden!
Frage 4: Was sind Constraints? Nennen Sie Beispiele!
Antwort: Constraints stellen sicher, dass die Daten konsistent und gültig sind.
| Constraint | Bedeutung | Beispiel |
|---|---|---|
PRIMARY KEY | Eindeutige ID (nicht NULL) | id INT PRIMARY KEY |
FOREIGN KEY | Fremdschlüssel (Verknüpfung) | FOREIGN KEY (user_id) REFERENCES users(id) |
NOT NULL | Feld darf nicht leer sein | email VARCHAR(100) NOT NULL |
UNIQUE | Wert darf nicht doppelt sein | email VARCHAR(100) UNIQUE |
DEFAULT | Standardwert | erstellt_am DATETIME DEFAULT CURRENT_TIMESTAMP |
CHECK | Bedingung prüfen (MySQL 8.0+) | alter INT CHECK (alter >= 0) |
19.2 Kern-SQL-Syntaxfragen
Frage 5: Erklären Sie den Unterschied zwischen WHERE und HAVING!
Antwort:
WHEREfiltert vor der Gruppierung (GROUP BY)HAVINGfiltert nach der Gruppierung
sql
-- ✅ Richtig: WHERE für Einzelzeilen
SELECT * FROM users WHERE alter > 18;
-- ✅ Richtig: HAVING für Gruppen
SELECT stadt, COUNT(*) AS anzahl
FROM users
GROUP BY stadt
HAVING anzahl > 5;⚠️ Häufiger Fehler: HAVING ohne GROUP BY verwenden!
Frage 6: Was ist der Unterschied zwischen INNER JOIN und LEFT JOIN?
Antwort:
INNER JOIN: Nur übereinstimmende Datensätze aus beiden TabellenLEFT JOIN: Alle Datensätze der linken Tabelle + passende der rechten (NULL falls keine Passung)
sql
-- INNER JOIN: Zeigt nur Benutzer MIT Bestellungen
SELECT u.username, o.bestell_id
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
-- LEFT JOIN: Zeigt ALLE Benutzer (auch ohne Bestellungen)
SELECT u.username, o.bestell_id
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;Frage 7: Was ist eine Unterabfrage (Subquery)?
Antwort: Eine Abfrage innerhalb einer anderen Abfrage.
sql
-- Unterabfrage: Finde Benutzer mit überdurchschnittlichem Umsatz
SELECT username, (SELECT AVG(umsatz) FROM users) AS durchschnitt
FROM users
WHERE umsatz > (SELECT AVG(umsatz) FROM users);19.3 Praxisszenario-Fragen
Frage 8: Wie entwerfen Sie eine Datenbank für ein Blog?
Antwort (Schritt-für-Schritt):
- Anforderungsanalyse: Benutzer, Artikel, Kommentare, Kategorien
- ER-Diagramm zeichnen:
users(1:n)postsposts(1:n)commentsposts(n:1)categories
- Tabellen erstellen:
sql
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
passwort_hash VARCHAR(255) NOT NULL
);
CREATE TABLE posts (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
kategorie_id INT NOT NULL,
titel VARCHAR(200) NOT NULL,
inhalt TEXT NOT NULL,
erstellt_am DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (kategorie_id) REFERENCES categories(id)
);
CREATE TABLE comments (
id INT PRIMARY KEY AUTO_INCREMENT,
post_id INT NOT NULL,
user_id INT NOT NULL,
inhalt TEXT NOT NULL,
erstellt_am DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (post_id) REFERENCES posts(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);Frage 9: Wie optimieren Sie eine langsame SQL-Abfrage?
Antwort:
EXPLAINverwenden → Ausführungsplan analysieren- Index erstellen auf Feldern in
WHERE,JOIN,ORDER BY SELECT *vermeiden → nur benötigte Spalten abfragenLIKE '%...%'vermeiden → Index wird nicht genutztWHERE-Bedingungen optimieren → Funktionen auf Spalten vermeiden
sql
-- ❌ Langsam (Index wird nicht genutzt)
SELECT * FROM users WHERE YEAR(erstellt_am) = 2024;
-- ✅ Schnell (Index kann genutzt werden)
SELECT * FROM users
WHERE erstellt_am >= '2024-01-01'
AND erstellt_am < '2025-01-01';Frage 10: Wie erstellen Sie ein Backup und stellen es wieder her?
Antwort:
- Backup erstellen:
mysqldump -u root -p datenbank > backup.sql - Wiederherstellung:
mysql -u root -p datenbank < backup.sql
bash
# Backup
mysqldump -u root -p shop_db > shop_backup_2024.sql
# Wiederherstellung
mysql -u root -p shop_db < shop_backup_2024.sql19.4 Sicherheitsfragen
Frage 11: Was ist SQL-Injection und wie verhindert man sie?
Antwort:
- SQL-Injection: Angreifer schleusen bösartigen SQL-Code über Eingabefelder ein
- Verhinderung:
- Prepared Statements verwenden (wichtigste Methode!)
- Eingaben validieren und bereinigen
- Keine dynamischen SQL-Abfragen bauen
- Fehlermeldungen unterdrücken
Beispiel (PHP mit Prepared Statements):
php
✅ Sicher!
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$user_id]);Frage 12: Wie verwalten Sie Datenbank-Berechtigungen?
Antwort:
- Prinzip der geringsten Rechte (Least Privilege)
- Separate Benutzer für jede Anwendung erstellen
- Nur notwendige Berechtigungen gewähren
sql
-- Benutzer erstellen
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'sicheres_passwort';
-- Nur Lese- und Schreibzugriff gewähren
GRANT SELECT, INSERT, UPDATE, DELETE ON shop_db.* TO 'app_user'@'localhost';
-- Berechtigungen aktivieren
FLUSH PRIVILEGES;19.5 Fortgeschrittene Fragen
Frage 13: Was ist eine Transaktion? Erklären Sie ACID!
Antwort: Eine Transaktion ist eine Folge von SQL-Befehlen, die entweder alle erfolgreich ausgeführt werden oder gar nicht (Rollback).
ACID-Eigenschaften:
- Atomicity (Atomarität): Alle oder keiner
- Consistency (Konsistenz): Datenbank bleibt konsistent
- Isolation (Isolation): Transaktionen beeinflussen sich nicht
- Durability (Dauerhaftigkeit): Ergebnis ist dauerhaft gespeichert
sql
START TRANSACTION;
UPDATE konten SET betrag = betrag - 100 WHERE id = 1;
UPDATE konten SET betrag = betrag + 100 WHERE id = 2;
COMMIT; -- Erfolg: Änderungen speichern
-- ROLLBACK; -- Fehler: Alle Änderungen rückgängig machenFrage 14: Was ist ein Index? Vor- und Nachteile?
Antwort:
- Index: Datenstruktur, die den Datenbankengine hilft, Daten schneller zu finden
- Vorteile: Schnellere Abfragen (
SELECT) - Nachteile: Langsamere
INSERT/UPDATE/DELETE(Index muss mitgeändert werden), belegt Speicherplatz
Wann Index erstellen?
- ✅ Bei großen Tabellen (ab ca. 1000 Zeilen)
- ✅ Bei Feldern, die häufig in
WHERE,JOIN,ORDER BYverwendet werden - ❌ Bei Feldern, die häufig geändert werden
- ❌ Bei kleinen Tabellen
Frage 15: Was sind Stored Procedures, Trigger und Views?
Antwort:
- Stored Procedure: Gespeicherte Prozedur (Gruppe von SQL-Befehlen)
- Trigger: Automatische Aktion bei
INSERT/UPDATE/DELETE - View: "Virtuelle Tabelle" (gespeicherte Abfrage)
sql
-- Stored Procedure
DELIMITER $$
CREATE PROCEDURE get_user_orders(IN p_user_id INT)
BEGIN
SELECT * FROM orders WHERE user_id = p_user_id;
END $$
DELIMITER ;
-- View
CREATE VIEW active_users AS
SELECT * FROM users WHERE ist_aktiv = TRUE;19.6 Interviewtipps für Einsteiger
Tipp 1: Kernkonzepte verstehen (nicht nur auswendig lernen!)
- Verstehen Sie, WARUM etwas gemacht wird (z.B. WARUM Index?)
- Praxisbeispiele parat haben (eigenes Projekt!)
Tipp 2: Häufige Fehler kennen
| Fehler | Richtige Lösung |
|---|---|
DELETE FROM users; (ohne WHERE) | Immer WHERE angeben! |
SELECT * in Produktion | Nur benötigte Spalten abfragen |
| Passwörter im Klartext speichern | SHA2() oder bcrypt verwenden |
ROOT-Benutzer in Anwendungen | Separate Benutzer mit begrenzten Rechten |
Tipp 3: Eigene Projekte präsentieren können
- Blog-Datenbank erklären können
- Shop-Datenbank erklären können
- Probleme erklären, die Sie gelöst haben
Zusammenfassung
In diesem Kapitel hast du gelernt:
- ✅ Grundlegende Konzeptfragen zu beantworten (MySQL-Definition, Datentypen, Constraints)
- ✅ Kern-SQL-Syntaxfragen zu beantworten (
WHEREvsHAVING,JOINs, Unterabfragen) - ✅ Praxisszenarien zu lösen (Datenbankdesign, SQL-Optimierung, Backup)
- ✅ Sicherheitsfragen zu beantworten (SQL-Injection, Berechtigungsverwaltung)
- ✅ Fortgeschrittene Fragen zu beantworten (Transaktionen, Indizes, Stored Procedures)
- ✅ Interviewtipps für Einsteiger
Übungen
- Praxis: Beantworten Sie Frage 8 (Blog-Datenbank) ausführlich (mit ER-Diagramm skizzieren!)
- Praxis: Schreiben Sie eine SQL-Abfrage für Frage 9 (langsame Abfrage optimieren)
- Praxis: Simulieren Sie eine SQL-Injection und zeigen Sie, wie man sie verhindert
- Praxis: Erklären Sie einem "Nicht-Techniker", was eine Datenbank ist
Nächstes Kapitel
Im nächsten Kapitel lernen wir Erweiterte Lernschwerpunkte – wohin Sie als nächstes gehen können, nachdem Sie MySQL gemeistert haben!
