Kurs
Ist dir schon mal aufgefallen, dass MySQL in fast jeder datenbankbezogenen Stellenanzeige gefragt ist? Das hat einen guten Grund — MySQL treibt so ziemlich alles an, von deinen Lieblingsplattformen in den sozialen Medien bis zu den Apps, die du täglich nutzt.
Ich habe diesen Leitfaden zusammengestellt, damit du MySQL-Interviewfragen souverän meisterst. Wir gehen alles durch — von Basics, die Junior-Entwickler draufhaben sollten, bis zu Themen, die für Senior-Rollen entscheidend sind. Außerdem gebe ich dir Tipps, wie du in deinen nächsten datenbezogenen Interviews selbstbewusst auftrittst.
Was ist MySQL?
MySQL ist ein Open-Source-RDBMS (relationales Datenbankmanagementsystem) auf Basis von SQL, das Daten in strukturierten Tabellen organisiert. Entwickelt wurde es von Oracle Corporation.
Es belegte 2024 den Spitzenplatz unter den Open-Source-DBMS. Eine Stack Overflow Developer Survey 2025 zeigte jedoch, dass PostgreSQL erstmals MySQL überholt hat und unter professionellen Entwicklern am weitesten verbreitet ist.
Nicht falsch verstehen: MySQL ist weiterhin enorm beliebt — mit 40,5 % Nutzung unter Entwicklern im Jahr 2025 — und treibt unzählige Webanwendungen, Content-Management-Systeme und Enterprise-Tools an. Besonders wenn du mit Webanwendungen oder dem LAMP-Stack arbeitest, gehört MySQL zu den Top-Kompetenzen.

2024 war MySQL das weltweit beliebteste Open-Source-DBMS mit einem Ranking-Score von 1061. Quelle: Statista.
Grundlegende MySQL-Interviewfragen
In der ersten Interviewphase werden oft Grundlagen abgefragt, um dein Verständnis zentraler Datenbank- und MySQL-Konzepte einzuschätzen.
1. Was ist eine Datenbank und wie unterscheidet sie sich von einem DBMS?
Eine Datenbank ist ein Speichercontainer, der Daten vorhält, auf die wir zugreifen, die wir ändern und analysieren können. So speichern etwa soziale Netzwerke in Datenbanken, wer unsere Posts gelikt hat.
Ein DBMS (Database Management System) ist die Software, mit der wir diese Daten verwalten und darauf zugreifen, z. B. Benutzer anlegen und ihre Rechte steuern. MySQL ist eines der beliebtesten DBMS. Weitere Beispiele sind PostgreSQL, MongoDB und Microsoft SQL Server.
2. Wie unterscheidet sich MySQL von anderen relationalen Datenbankmanagementsystemen?
MySQL ist ein Open-Source-RDBMS, das SQL zur Datenverwaltung nutzt. Es ist bekannt für Benutzerfreundlichkeit, Geschwindigkeit und hohe Kompatibilität mit webbasierten Anwendungen.
So unterscheidet sich MySQL von anderen RDBMS:
- Einfachheit und Performance: MySQL gilt als unkompliziert und performant optimiert — ideal für Webentwickler und Startups.
- Erweiterte Funktionen: MySQL punktet bei der Bedienung, hat aber weniger erweiterte Features als z. B. PostgreSQL, etwa umfassendere ACID-Unterstützung, fortgeschrittene Indizes und eine breitere Auswahl an Datentypen.
- Storage-Engines: MySQL erlaubt die Wahl verschiedener Storage-Engines (z. B. InnoDB, MyISAM) pro Tabelle und bietet damit Flexibilität für spezifische Use Cases.
MySQL ist ideal, wenn es auf Tempo und Skalierung ankommt. Für komplexere oder Enterprise-Features kann PostgreSQL die bessere Wahl sein.
3. Welche Haupt-Datentypen gibt es in MySQL?
MySQL unterstützt verschiedene Datentypen, grob kategorisiert in:
-
Numerisch:
INT,DECIMAL,FLOAT,DOUBLEusw. -
Zeichenketten:
CHAR,VARCHAR,TEXT,BLOB. -
Datum/Zeit:
DATE,DATETIME,TIMESTAMP,TIME. -
JSON: Zum Speichern von JSON-Objekten.
4. Was ist der Unterschied zwischen den Datentypen INT und DECIMAL?
INT speichert ganze Zahlen ohne Nachkommastellen. Nutze ihn, wenn keine Bruchteile nötig sind. DECIMAL speichert exakte Dezimalwerte (z. B. Geldbeträge) und eignet sich für präzise Berechnungen mit Nachkommastellen.
5. Worin unterscheiden sich DATE und DATETIME in MySQL?
Der Datentyp DATE speichert das Datum im Format:
YYYY-MM-DD
Der Datentyp DATETIME speichert Datum inklusive Uhrzeit, so:
YYYY-MM-DD HH:MM:SS
6. Was ist ein Fremdschlüssel und wie setzt du ihn in Datenbanken ein?
Ein Fremdschlüssel ist ein Feld in einer Tabelle, das auf den Primärschlüssel einer anderen Tabelle verweist.
Beispiel: In einer Tabelle customers mit Kundendaten hat jeder Kunde eine eindeutige customer_id. In einer weiteren Tabelle transactions (Kaufhistorie) verwenden wir customer_id als Fremdschlüssel. Die customer_id in transactions verknüpft jeden Kauf mit dem passenden Datensatz in der Tabelle customers .
So sieht das in SQL aus:
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
CREATE TABLE transactions (
transaction_id INT PRIMARY KEY,
customer_id INT,
amount DECIMAL(10,2),
date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
7. Was sind die Unterschiede zwischen INNER JOIN, LEFT JOIN, RIGHT JOIN und FULL JOIN?
Joins kombinieren Zeilen aus zwei oder mehr Tabellen über verknüpfte Spalten. Das sind die Unterschiede:
-
INNER JOIN: Gibt nur Zeilen mit Treffern in beiden Tabellen zurück.
-
LEFT JOIN: Gibt alle Zeilen der linken Tabelle und passende Zeilen der rechten Tabelle zurück. Ohne Treffer stehen die Spalten der rechten Tabelle auf
NULL. -
RIGHT JOIN: Analog zu
LEFT JOIN, aber alle Zeilen der rechten Tabelle und passende der linken. -
FULL JOIN: Vereint die Ergebnisse von
LEFT JOINundRIGHT JOIN, inkl. nicht übereinstimmender Zeilen beider Tabellen. Hinweis: MySQL unterstütztFULL JOINnicht nativ. Nutze stattdessen eineUNIONausLEFT JOINundRIGHT JOIN.
8. Was ist der Unterschied zwischen DELETE, TRUNCATE und DROP in MySQL?
Befehle wie DELETE, TRUNCATE und DROP klingen ähnlich, verhalten sich aber unterschiedlich:
DELETE: Löscht Zeilen anhand einer Bedingung. Innerhalb einer Transaktion rückgängig machbar. Beispiel:
DELETE FROM employees WHERE department_id = 5;
TRUNCATE: Löscht alle Zeilen einer Tabelle, die Struktur bleibt erhalten. Schneller als DELETE und nicht rückgängig machbar. Beispiel:
TRUNCATE TABLE employees;
DROP: Entfernt die Tabelle inklusive Struktur und Daten vollständig, inkl. Abhängigkeiten wie Indizes. Beispiel:
DROP TABLE employees;
9. Wie erstellst und veränderst du eine Tabelle in MySQL? Bitte Beispiele.
Zum Erstellen nutzt du CREATE TABLE, zum Ändern meist ALTER TABLE. Beispiele:
Tabelle erstellen:
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50));
Spalte hinzufügen:
ALTER TABLE employees ADD COLUMN salary DECIMAL(10, 2);
10. Was ist eine temporäre Tabelle in SQL?
Eine temporäre Tabelle existiert nur während der aktuellen Datenbanksitzung. Nach dem Schließen wird sie gelöscht. Sie eignet sich, um Zwischenergebnisse vorübergehend zu speichern, z. B. für Tests, Filterungen oder zur Vorbereitung von Daten vor dem Einfügen in eine permanente Tabelle.
Beispiel:
CREATE TEMPORARY TABLE temp_employees (
id INT,
name VARCHAR(50)
);
INSERT INTO temp_employees VALUES (1, 'John Doe');
SELECT * FROM temp_employees;
11. Was ist eine Unterabfrage (Subquery) in MySQL? Erkläre mit Beispiel.
Eine Subquery (auch verschachtelte Abfrage) liegt innerhalb einer anderen Abfrage. So lassen sich komplexe Operationen in handhabbare Schritte zerlegen. Beispiel: Mitarbeitende mit überdurchschnittlichem Gehalt finden:
SELECT first_name, last_name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);
So funktioniert es:
-
Die innere Abfrage
SELECT AVG(salary) FROM employeesberechnet zuerst den Durchschnitt. -
Die äußere Abfrage nutzt diesen Wert, um alle darüberliegenden Gehälter zu finden.
12. Wie nutzt du eine INSERT-Anweisung in MySQL, um Daten hinzuzufügen? Gibt es Best Practices?
Mit INSERT fügst du Daten in eine Tabelle ein. Die Basissyntax:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
Best Practices für INSERT:
-
Spalten immer explizit angeben. Das macht den Code robuster bei Schemaänderungen.
-
AUTO_INCREMENT-Spalten wie IDs imINSERTauslassen. MySQL vergibt diese automatisch und verhindert doppelte IDs. -
String-Anführungen konsistent halten. Ich nutze gerne einfache Anführungszeichen, beides ist aber möglich.
-
Mehrere Zeilen in einer Anweisung einfügen — das ist performanter.
13. Welche Bedeutung hat das Attribut AUTO_INCREMENT in MySQL?
AUTO_INCREMENT erzeugt eindeutige, aufsteigende Werte für eine Spalte, typischerweise den Primärschlüssel.
So erstellst du eine Tabelle mit AUTO_INCREMENT:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
Und so fügst du Zeilen ein:
INSERT INTO employees (name, department) VALUES ('John Doe', 'Sales');
INSERT INTO employees (name, department) VALUES ('Jane Smith', 'Marketing');
14. Was ist eine View in MySQL?
Eine View ist eine gespeicherte Abfrage und verhält sich wie eine virtuelle Tabelle. Du gibst einer komplexen Abfrage einen Namen und nutzt sie künftig wie eine Tabelle. So musst du sie nicht jedes Mal neu schreiben.
Beispiel: Um Mitarbeitende inklusive Abteilungsname leichter abzufragen:
CREATE VIEW employee_details AS
SELECT
e.id,
e.name,
d.department_name,
e.salary
FROM
employees e
JOIN
departments d ON e.department_id = d.department_id;
Die View employee_details kannst du dann wie eine Tabelle abfragen:
SELECT * FROM employee_details;
Einfügen und Aktualisieren über Views ist meist nicht möglich. Viele Views sind read-only und schirmen die zugrunde liegenden Tabellen ab, was die Datensicherheit erhöht. Allerdings können Views Abfragen verlangsamen, da bei jedem Zugriff die zugrunde liegende Abfrage ausgeführt wird.
SQL Upskilling für Einsteiger
MySQL-Interviewfragen für Fortgeschrittene
In diesem Abschnitt behandeln wir Themen auf mittlerem Niveau. Diese Fragen prüfen vor allem dein Wissen zu MySQL-Datentypen und -Strukturen.
15. Was sind systemversionierte Tabellen und wie funktionieren sie?
Systemversionierte Tabellen halten die komplette Änderungshistorie einer Tabelle vor. Weil frühere Versionen jeder Zeile gespeichert werden, eignen sie sich für Audits und zur Wiederherstellung von Daten.
Sie arbeiten mit zwei zusätzlichen Spalten — StartTime und EndTime —, die die Gültigkeitszeiträume protokollieren. Bei Insert, Update oder Delete werden die Zeitstempel wie folgt gesetzt:
-
Insert: Neue Zeile mit
StartTime= aktueller Zeitstempel undEndTime=9999-12-31 23:59:59— der maximalenDATETIME-Zeit in MySQL als Platzhalter für „aktuell gültig“. -
Update: Die alte Zeile erhält eine
EndTime= aktueller Zeitstempel (nicht mehr gültig). Dann wird eine neue Zeile mit aktualisierten Daten,StartTime= jetzt undEndTime= „für immer“ angelegt. -
Delete: Die bestehende Zeile bekommt
EndTime= aktueller Zeitstempel und ist damit ungültig.
Mit der SQL-Klausel FOR SYSTEM_TIME kannst du den Tabellenzustand zu einem Zeitpunkt oder in einem Zeitraum abfragen, z. B.:
-
FOR SYSTEM_TIME AS OF '2024-01-01': Liefert den Zustand am 1. Januar 2024. -
FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31': Zeigt alle in diesem Zeitraum gültigen Zeilen.
16. Was sind MySQL-Transaktionen und wie nutzt du sie?
Transaktionen sind eine Folge von Operationen, die als Einheit ausgeführt werden. Sie stellen Datenintegrität sicher, indem entweder alles gemeinsam erfolgreich ist oder gemeinsam fehlschlägt.
Beispiel:
START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE account_id = 2;
COMMIT; -- Speichert Änderungen dauerhaft
-- oder
ROLLBACK; -- Macht Änderungen rückgängig
17. Was ist eine Default-Constraint in MySQL? Wie setzt du Standardwerte für Spalten?
Eine Default-Constraint weist einer Spalte einen Standardwert zu, wenn beim INSERT kein expliziter Wert angegeben wird. So bleibt die Spalte valide, auch wenn sie beim Einfügen weggelassen wird.
So erstellst du eine Tabelle mit Default-Wert:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
status VARCHAR(10) DEFAULT 'active'
);
Danach kannst du eine Zeile ohne status einfügen:
INSERT INTO employees (name) VALUES ('John Doe');
So sinkt das Risiko für NULL- oder ungültige Werte in kritischen Spalten, und Abfragen werden einfacher, weil Sonderfälle seltener behandelt werden müssen.
|
Feld |
Typ |
Null |
Key |
Default |
Extra |
|
id |
INT |
NO |
PRI |
NULL |
AUTO_INCREMENT |
|
name |
VARCHAR(50) |
YES |
NULL |
||
|
status |
VARCHAR(10) |
YES |
active |
Das ist nützlich, weil:
- Entwickler das Tabellenschema vor dem Schreiben von Abfragen besser verstehen.
- Es beim Debuggen hilft, besonders in unbekannten Datenbanken.
- Constraints wie Primärschlüssel oder Standardwerte schnell sichtbar werden.
18. Was ist der Unterschied zwischen CHAR und VARCHAR in MySQL?
Beide speichern Zeichenketten, unterscheiden sich aber in der Speicherung:
-
CHAR(n)speichert immer genaunZeichen und füllt kürzere Werte mit Leerzeichen auf. Fixe Länge macht es minimal schneller bei Spalten mit stets gleicher Länge, z. B. Ländercodes oder Statusflags. -
VARCHAR(n)speichert nur die tatsächliche Zeichenanzahl bis maximaln. Für variable Längen sparsamer, mit geringem Overhead für die Längeninformation.
CREATE TABLE example (
country_code CHAR(2), -- Immer 2 Zeichen, z. B. 'US', 'UK'
email VARCHAR(255) -- Variable Länge bis 255 Zeichen
);
Faustregel: CHAR für feste Längen, VARCHAR für alles andere.
19. Wie nutzt du Stringfunktionen in SQL, um Text zu bearbeiten?
Verschiedene Stringfunktionen helfen bei Namen und anderen Textdaten. Beispiele:
-
Mit
LENGTH()erhältst du die Zeichenanzahl eines Namens. -
UPPER()undLOWER()konvertieren in Groß- bzw. Kleinschreibung. -
CONCAT()verbindet Vor- und Nachname zu einer Spalte. -
SUBSTRING()extrahiert Teile eines Texts, z. B. den Monat aus dem Geburtsdatum.
Beispielabfrage:
SELECT
UPPER(first_name) AS upper_name,
CONCAT(first_name, ' ', last_name) AS full_name,
SUBSTRING(birthdate, 6, 2) AS birth_month,
TRIM(last_name) AS trimmed_last_name,
REPLACE(first_name, 'a', '@') AS replaced_name
FROM employees;
Diese Abfrage:
-
Wandelt Namen in Großbuchstaben um.
-
Vereint Vor- und Nachnamen zum vollen Namen.
-
Extrahiert den Geburtsmonat aus
birthdate. -
Trimmt Leerzeichen am Nachnamen.
-
Ersetzt alle „a“ durch „@“ im Vornamen.
20. Wie aktualisierst du eine bestimmte Zeile in einer Datenbank mit SQL?
Mit UPDATE und einer passenden WHERE-Klausel identifizierst du den gewünschten Datensatz.
Beispiel: Du willst das Genre des Films „Inception“ aus 2010 auf „Sci-Fi“ setzen:
UPDATE movies
SET genre = 'Sci-Fi'
WHERE movie_title = 'Inception' AND year = 2010;
Hier legt UPDATE movies die Tabelle fest, und die WHERE-Klausel zielt auf die Zeile mit Titel „Inception“ und Jahr „2010“.
MySQL-Interviewfragen für Fortgeschrittene (Advanced)
Fortgeschrittene Fragen testen, wie du komplexe MySQL-Szenarien meisterst und geben Einblick in deine Entscheidungsfähigkeit.
21. Was ist ein Trigger in MySQL? Wie setzt du ihn um?
Ein Trigger ist ein Aktionsbündel, das bei einem Datenbankereignis ausgeführt wird. Trigger können vor oder nach Ereignissen wie INSERT, UPDATE oder DELETE laufen.
Beispiel: In einer Tabelle orders werden neue Bestellungen erfasst. Wir protokollieren jede neue Bestellung in order_history:
CREATE TRIGGER after_order_insert
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
INSERT INTO order_history (order_id, action, timestamp)
VALUES (NEW.order_id, 'inserted', NOW());
END;
Nach dem Triggerlauf wird die Tabelle order_history automatisch aktualisiert:
|
history_id |
order_id |
action |
timestamp |
|
1 |
1 |
inserted |
2024-12-24 10:00:00 |
|
2 |
2 |
inserted |
2024-12-24 11:00:00 |
22. Warum machen Indizes SQL-Abfragen schneller?
Ohne Index muss die Datenbank jede Zeile scannen, um Treffer zu finden. Ein Index funktioniert wie ein Inhaltsverzeichnis und ermöglicht gezielten Zugriff auf relevante Zeilen. Dadurch sinkt die Suchzeit und Abfragen laufen schneller.
Indizes basieren typischerweise auf Datenstrukturen wie B-Bäumen oder Hash-Tabellen und erlauben effiziente Suchen, Lookups und Bereichsabfragen.
So legst du einen Index an:
-- Ohne Index:
SELECT * FROM employees WHERE last_name = 'Smith';
-- Index auf der Spalte last_name hinzufügen:
CREATE INDEX idx_last_name ON employees(last_name);
-- Mit Index kann die DB Zeilen mit 'Smith' im last_name gezielt finden.
Nachteile von Indizes:
-
Langsamere Schreibvorgänge:
INSERT,UPDATEundDELETEsind träger, weil der Index bei jeder Änderung aktualisiert werden muss. -
Speicherbedarf: Indizes belegen zusätzlichen Speicherplatz.
23. Welche Datentypen nutzt du für Produktgewicht und -preis in einer SQL-Tabelle und warum?
Für Gewicht ist DECIMAL in der Regel die sicherere Wahl. FLOAT und REAL speichern zwar Dezimalwerte, arbeiten aber mit Gleitkommaarithmetik und können Rundungsfehler verursachen.
Wenn Genauigkeit zählt (z. B. Versand, Lager), bietet DECIMAL(8, 3) präzise Kontrolle mit drei Nachkommastellen ohne böse Überraschungen. FLOAT ist nur okay, wenn eine kleine Fehlertoleranz akzeptabel ist.
24. Wie findest du doppelte Zeilen in SQL mit einer Fensterfunktion?
So findest du Duplikate mit ROW_NUMBER():
WITH DuplicateCheck AS (
SELECT product_name,
category,
ROW_NUMBER() OVER(
PARTITION BY product_name, category
ORDER BY id
) AS row_num
FROM sales
)
SELECT *
FROM DuplicateCheck
WHERE row_num > 1;
So funktioniert es im Detail:
1. ROW_NUMBER() nummeriert jede Zeile im Ergebnis.
2. PARTITION BY gruppiert nach product_name und category.
3. Innerhalb jeder Gruppe werden Zeilen ab 1 durchnummeriert.
4. Ein row_num größer 1 kennzeichnet Duplikate.
Beispielhafte Ergebnisse:
- Produkt A, Kategorie X, row_num = 1
- Produkt A, Kategorie X, row_num = 2 (Duplikat)
- Produkt B, Kategorie Y, row_num = 1
Die Abfrage zeigt die zweite Zeile an, da row_num größer 1 ist.
25. Wie erstellst und nutzt du eine Stored Procedure mit Parametern in MySQL? Mit Beispiel.
Mit Stored Procedures speicherst und wiederverwendest du komplexe Logik, was Abläufe effizienter und wartbarer macht. Schauen wir uns ein praktisches Beispiel mit Parametern an.
Angenommen, wir haben eine Studentendatenbank und wollen nach Alter filtern. Zuerst eine einfache Prozedur mit Eingabeparameter:
CREATE PROCEDURE get_student_info(IN age INT)
BEGIN
SELECT * FROM student WHERE student.age = age;
END;
Aufrufen mit:
CALL get_student_info(21);
Mit Ausgabeparametern wird es noch flexibler. Beispiel: Anzahl der Studierenden eines Alters zählen:
CREATE PROCEDURE count_students_by_age(IN age INT, OUT student_count INT)
BEGIN
SELECT COUNT(*) INTO student_count FROM students WHERE students.age = age;
END;
Ergebnis abfragen:
SET @count = 0;
CALL count_students_by_age(21, @count);
SELECT @count AS total_students;
26. Warum ist referentielle Integrität in einer Datenbank wichtig?
Referentielle Integrität hält die Beziehungen zwischen Tabellen konsistent. Ein Fremdschlüssel stellt sicher, dass Werte einer Tabelle zu einem eindeutigen Wert in der referenzierten Tabelle passen.
Praxisbeispiel: In einem E-Commerce-System gibt es Customers und Orders. Jede Bestellung muss einem echten Kunden zugeordnet sein. Fremdschlüssel erzwingen diese Regeln:
- Keine Bestellung für nicht existierende Kunden.
- Kein Löschen eines Kunden mit vorhandenen Bestellungen (außer es ist geregelt, was mit den Bestellungen passiert).
- Kein Update der Kunden-ID, wenn Bestellungen existieren.
Mit folgender Constraint:
ALTER TABLE Orders
ADD FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);
Erzwingt die Datenbank automatisch:
-
Jede
CustomerIDinOrdersmuss inCustomersexistieren. -
Verstöße (z. B. ungültige
CustomerID) werden abgelehnt.
So vermeidest du Inkonsistenzen wie Bestellungen ohne zuordenbare Kunden oder fehlerhafte Berichte.
MySQL-Interviewfragen für Database Administrators
Bewirbst du dich speziell als Datenbankadministrator, können dir diese Fragen begegnen.
27. Warum setzt eine große Anwendung Sharding ein? Welche Herausforderungen gibt es?
Sharding teilt große Datenmengen auf mehrere Server auf. Jeder Shard enthält einen Teil der Daten. Dadurch verteilt sich die Last, teure Hardware ist seltener nötig, und Geschwindigkeit wie Skalierbarkeit steigen. Herausforderungen:
- Bestimmte Abfragen wie Joins funktionieren shard-übergreifend schlecht oder aufwendig.
- Mit wachsender Datenmenge können Shards „Hotspots“ bilden und die Performance bremsen.
28. Welche Rolle spielen Redo-Logs bei der MySQL-Crash-Recovery?
Bei jeder Datenänderung muss letztlich auf die Festplatte geschrieben werden. Direkt in die Datendateien zu schreiben ist jedoch langsam und riskant. Daher protokolliert MySQL Änderungen zuerst im Redo-Log, bevor Datendateien angepasst werden. Das ist sicherer als unmittelbare, verteilte Dateizugriffe.
Beispiel: Du aktualisierst eine Kundenadresse:
- MySQL schreibt die Änderung zuerst ins Redo-Log.
- Die Transaktion wird als „committed“ bestätigt.
- Später wird die Änderung in die Datendateien geschrieben.
Kommt es zwischen Schritt 1/2 und 3 zum Absturz, liest MySQL beim Neustart das Redo-Log und spielt unvollendete Änderungen nach. So gehen bestätigte Transaktionen nicht verloren, selbst bei ungünstigem Zeitpunkt des Crashs.
29. Welche Storage-Engines gibt es in MySQL und worin unterscheiden sie sich?
MySQL unterstützt mehrere Storage-Engines, die für unterschiedliche Einsatzzwecke optimiert sind. Die wichtigsten im Vergleich:
| Storage-Engine | Schlüsseleigenschaften | Einsatzgebiet |
|---|---|---|
| InnoDB | Standardengine. ACID-konform, Zeilensperren, Transaktionen und Fremdschlüssel. | E-Commerce, Finanzsysteme, überall, wo Integrität zählt. |
| MyISAM | Schnelle Lesezugriffe, Tabellensperren. Keine Transaktionen, keine Fremdschlüssel. | Leseintensive Anwendungen, wo Tempo wichtiger als Integrität ist. |
| Memory | Daten im RAM. Extrem schnell, aber bei Neustart verloren. | Caching, Sitzungsverwaltung, temporäre Daten. |
| CSV | Speichert als einfache CSV-Dateien. Kein Indexing. | Datenaustausch zwischen Anwendungen, einfache Flatfiles. |
| Archive | Hohe Komprimierung. Nur INSERT und SELECT. Keine Indizes. | Logdaten oder historische Daten mit seltenen Abfragen. |
| NDB (Clustered) | Verteilte Speicherung, hohe Verfügbarkeit, fehlertolerant, unterstützt Transaktionen. | Großskalige, verteilte Anwendungen mit Echtzeitanforderungen. |
30. Wie legst du eine Standard-Storage-Engine in MySQL fest?
Zuerst den aktuellen Standard prüfen:
SHOW ENGINES;
InnoDB ist als Standard empfehlenswert, weil es u. a. unterstützt:
- ACID-konforme Transaktionen
- Fremdschlüssel
- Crash-Recovery
- Zeilensperren
Für die aktuelle Sitzung temporär ändern:
SET default_storage_engine = 'InnoDB';
Für eine dauerhafte Änderung in der MySQL-Konfiguration im Abschnitt [mysqld] ergänzen:
default-storage-engine = InnoDB
31. Wie reparierst du korrupte Tabellen in MySQL?
Zuerst alle Datenbanken prüfen:
mysqlcheck --check --all-databases -u root -p
Der Befehl scannt alle Tabellen und meldet mögliche Korruption. Reparatur dann z. B. so:
mysqlcheck --repair database_name table_name -u root -p
Achtung: Reparaturen können bei starker Beschädigung zu Datenverlust führen. Vorher unbedingt ein Backup erstellen.
Szenario- und Problemorientierte MySQL-Interviewfragen
Diese Fragen prüfen deine Erfahrung mit realen, komplexen Szenarien und deine Lösungsfähigkeit.
32. Erkläre ein Szenario, in dem du Subqueries in MySQL eingesetzt hast.
So könntest du antworten:
In meinem letzten Job habe ich die Datenbank eines Onlineshops betreut und einen Produktreport aufgebaut. Ziel war, Produkte mit überdurchschnittlichen Umsätzen zu finden. Dafür nutzte ich Subqueries für die mehrstufige Analyse.
Die dazugehörige SQL-Abfrage:
SELECT
p.product_id,
p.product_name,
s.sales_amount
FROM products p
JOIN sales s ON p.product_id = s.product_id
WHERE s.sales_amount > (
SELECT AVG(sales_amount)
FROM sales
)
ORDER BY s.sales_amount DESC;
Zuerst habe ich den Durchschnittsumsatz über alle Produkte per Subquery in der WHERE-Klausel berechnet. Diese Unterabfrage definierte eine dynamische Schwelle, an der die Performance jedes Produkts gemessen wurde.
Die Hauptabfrage verknüpfte Produkte und Sales, zog die Produktdetails und filterte alle Produkte unterhalb des Durchschnitts heraus.
So konnte ich High-Performer in einem Schritt identifizieren, ohne mehrere Einzelabfragen zu fahren.
33. Kannst du eine Situation beschreiben, in der du SQL-Joins genutzt hast, um Daten aus mehreren Tabellen zu kombinieren?
Musterantwort:
Kürzlich habe ich mit zwei zentralen Tabellen gearbeitet — eine mit Verkaufsdaten, eine mit Produktdetails. Ich sollte einen Report mit sales, product name, category und price erstellen.
Ich habe einen INNER JOIN über die gemeinsame Spalte product_id genutzt, um Transaktionen mit Produktdetails zu verknüpfen:
SELECT
s.sales_date,
p.product_name,
p.category,
s.quantity_sold,
p.price
FROM
sales s
INNER JOIN
products p
ON
s.product_id = p.product_id;
Der Report zeigte klare Verkaufstrends und half Stakeholdern, starke Kategorien zu erkennen und schwächere zu priorisieren.
34. Hast du Erfahrung mit Triggern? Erkläre, wie du sie eingesetzt hast.
Beispielantwort:
Ja, ich habe umfassend mit Triggern gearbeitet. In meiner letzten Rolle habe ich einen AFTER UPDATE-Trigger zur Preishistorie implementiert.
Konkret habe ich einen Trigger erstellt, der Preisänderungen automatisch protokolliert. Das Skript:
CREATE TRIGGER tr_AuditPriceChanges
AFTER UPDATE ON Products
FOR EACH ROW
BEGIN
-- Nur protokollieren, wenn sich der Preis wirklich ändert
IF OLD.UnitPrice <> NEW.UnitPrice THEN
INSERT INTO PriceAudit (
ProductID,
OldPrice,
NewPrice,
ChangedBy,
ChangeDate,
PercentageChange
)
VALUES (
NEW.ProductID,
OLD.UnitPrice,
NEW.UnitPrice,
CURRENT_USER(),
NOW(),
ROUND(((NEW.UnitPrice - OLD.UnitPrice) / OLD.UnitPrice * 100), 2)
);
END IF;
END;
Das war wirkungsvoll, weil:
- Er nur bei echten Preisänderungen auslöst.
- Der ändernde Nutzer via
SYSTEM_USERerfasst wird. - Die prozentuale Änderung für Reports berechnet wird.
- Er Nicht-Änderungen bei Updates anderer Spalten ausblendet.
Zudem habe ich Fehlerbehandlung und Logging ergänzt, als Randfälle mit NULL-Preisen auftraten.
Tipps zur Vorbereitung auf ein MySQL-Interview
Wenn du gerade erst einsteigst, helfen dir diese Tipps, im Gespräch zu überzeugen:
Beherrsche die MySQL-Kernkonzepte: Lerne die Datenbank-Grundlagen wie Indexierung, Transaktionen und Query Optimizer. Verstehe, wie MySQL Abfragen verarbeitet und Daten speichert. So schreibst du effizientere Abfragen und kannst deine Lösungen im Interview gut erklären.
Sammle Praxis: Installiere MySQL lokal und übe regelmäßig. Erstelle Testdatenbanken, schreibe verschiedene Abfragen und optimiere sie. Echte Praxis ist der schnellste Weg zu Verständnis und Selbstvertrauen.
Zum Auffrischen lohnt sich ein Blick in die DataCamp-Ressourcen:
- Für den Einstieg in SQL: Introduction to SQL Course
- Für Übung in SQL: Applying SQL to real-world problems
Lerne MySQL-Tools und Integrationen kennen: Mach dich mit MySQL Workbench oder anderen Tools zur Datenbankverwaltung und Basis-Monitoring vertraut. Du kannst dir auch ansehen, wie MySQL mit Python zusammenspielt und mit relevanten Frameworks — das zeigt, dass du in einer echten Entwicklungsumgebung arbeiten kannst.
Fazit
Damit hast du die 34 wichtigsten MySQL-Interviewfragen, um deinen nächsten Job zu landen. Ob Einsteigerrolle oder fortgeschrittene DBA-Position: Ein solides Fundament in MySQL, Query-Optimierung und Datenbankmanagement lässt dich herausstechen.
Wenn du andere Datenbankmanagementsysteme besser verstehen möchtest, schau dir die SQL-Kurse von DataCamp an.
Werde SQL-zertifiziert
Ich bin ein Inhaltsstratege, der es liebt, komplexe Themen zu vereinfachen. Ich habe Unternehmen wie Splunk, Hackernoon und Tiiny Host geholfen, ansprechende und informative Inhalte für ihr Publikum zu erstellen.
