Kurs
Top 34 MySQL Interview Fragen und Antworten für 2025
Ist dir schon mal aufgefallen, dass MySQL in fast jeder datenbankbezogenen Stellenbeschreibung verlangt wird? Dafür gibt es einen guten Grund - MySQL treibt so ziemlich alles an, von deinen bevorzugten Social-Media-Plattformen bis zu den Apps, die du täglich benutzt.
Ich habe diesen Leitfaden zusammengestellt, um dir zu helfen, die Fragen in einem MySQL-Interview zu beantworten. Ich werde alle Grundlagen abdecken, von den Grundlagen, die Junior-Entwickler wissen sollten, bis hin zu den komplexen Dingen, die Senior-Rollen erfordern. Außerdem verrate ich dir ein paar Tipps, die dir helfen, bei deinen nächsten Vorstellungsgesprächen mit Daten selbstbewusst aufzutreten.
Was ist MySQL?
MySQL ist ein Open-Source-RDBMS (relationales Datenbankmanagementsystem), das auf SQL basiert und Daten in strukturierten Tabellen organisiert. Es wurde von der Oracle Corporation entwickelt.
Es ist das beliebteste DBMS im Jahr 2024, weil immer mehr Unternehmen ihre Daten zu MySQL migrieren. Deshalb ist es so wichtig, dass du dich mit MySQL und relationalen Datenbanken auskennst, wenn du einen Datenbankjob anstrebst.
Im Juni 2024 ist MySQL mit 1061 Punkten das beliebteste Open-Source-Datenbankmanagementsystem (DBMS) der Welt. Quelle: Statista.
Grundlegende MySQL-Interview-Fragen
In der ersten Phase des Gesprächs kann der Interviewer grundlegende Fragen stellen, um dein Verständnis der grundlegenden Datenbank- und MySQL-Konzepte zu beurteilen.
1. Was ist eine Datenbank, und wie unterscheidet sie sich von einem DBMS?
Eine Datenbank ist ein Speichercontainer, der Daten enthält, auf die wir zugreifen, sie verändern und analysieren können. Soziale Medienplattformen speichern zum Beispiel Daten darüber, wem unsere Beiträge gefallen haben, in Datenbanken.
Ein DBMS (Database Management System) ist die Software, die es uns ermöglicht, mit diesen Daten zu interagieren und sie zu verwalten, indem wir Benutzer anlegen und deren Zugriff verwalten. MySQL ist eine der beliebtesten DBMS-Optionen. Andere Beispielesind PostgreSQL, MongoDB und Microsoft SQL Server.
2. Wie unterscheidet sich MySQL von anderen relationalen Datenbankmanagementsystemen?
MySQL ist ein quelloffenes relationales Datenbankmanagementsystem (RDBMS), das SQL zur Datenverwaltung verwendet. Es ist bekannt für seine Benutzerfreundlichkeit, Geschwindigkeit und Kompatibilität mit webbasierten Anwendungen.
Hier ist der Unterschied zwischen MySQL und anderen RDBMS:
- Einfachheit und Leistung: MySQL wird oft für seine Einfachheit und optimierte Leistung gelobt, was es zu einer ersten Wahl für Webentwickler und Startups macht.
- Erweiterte Funktionen: Während MySQL sich durch seine Benutzerfreundlichkeit auszeichnet, fehlen ihm möglicherweise fortschrittliche Funktionen anderer RDBMS wie PostgreSQL, wie z. B. eine umfassendere Unterstützung für ACID-Transaktionen, eine erweiterte Indexierung und eine breitere Palette von Datentypen.
- Speichermotoren: Bei MySQL kannst du verschiedene Speicher-Engines (z. B. InnoDB, MyISAM) für Tabellen auswählen, was dir Flexibilität für bestimmte Anwendungsfälle bietet.
MySQL ist ideal für Szenarien, die Geschwindigkeit und Skalierbarkeit erfordern, aber für komplexere oder unternehmenstaugliche Funktionen ist PostgreSQL vielleicht die bessere Wahl.
3. Was sind die wichtigsten Datentypen in MySQL?
MySQL unterstützt eine Vielzahl von Datentypen, die wie folgt kategorisiert sind:
- Numerisch:
INT
,DECIMAL
,FLOAT
,DOUBLE
, etc. - String:
CHAR
,VARCHAR
,TEXT
,BLOB
. - Datum/Uhrzeit:
DATE
,DATETIME
,TIMESTAMP
,TIME
. - JSON: Zum Speichern von JSON-Objekten.
4. Was ist der Unterschied zwischen INT und DECIMAL Datentypen?
INT
speichert ganze Zahlen ohne Nachkommastellen. Wir können sie verwenden, wenn wir keine Brüche brauchen. Im Gegensatz dazu kann DECIMAL
finanzielle Werte speichern und ist für präzise Berechnungen mit Dezimalstellen geeignet.
5. Was ist der Unterschied zwischen DATE und DATETIME in MySQL?
Die Funktion DATE
in MySQL speichert das Datum im Format Jahr, Monat und Tag:
YYYY-MM-DD
Die Funktion DATETIME
speichert jedoch das Datum zusammen mit der Uhrzeit, und das sieht dann so aus:
YYYY-MM-DD HH:MM:SS
6. Was ist ein Fremdschlüssel und wie würdest du ihn in Datenbanken verwenden?
Ein Fremdschlüssel ist ein Feld in einer Tabelle, das mit dem Primärschlüssel einer anderen Tabelle verknüpft ist.
In der Tabelle customers
, in der Kundendaten gespeichert werden, hat jeder Kunde einen eindeutigen customer_id
- in einer anderen Tabelle namens transactions
(in der Kaufdatensätze gespeichert werden), verwenden wir customer_id
als Fremdschlüssel. Die customer_id
in der Transaktionstabelle verknüpft jeden Kauf mit einem bestimmten Kunden in derTabelle 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 auf der Grundlage verwandter Spalten. Hier sind ihre Unterschiede:
- INNER JOIN: Gibt Zeilen zurück, in denen es in beiden Tabellen eine Übereinstimmung gibt.
- LEFT JOIN: Gibt alle Zeilen aus der linken Tabelle und die passenden Zeilen aus der rechten Tabelle zurück. Wenn es keine Übereinstimmung gibt, wird
NULL
für die Spalten der richtigen Tabelle zurückgegeben. - RIGHT JOIN: Ähnlich wie bei
LEFT JOIN
werden alle Zeilen aus der rechten Tabelle und die passenden Zeilen aus der linken Tabelle zurückgegeben. - FULL JOIN: Kombiniert die Ergebnisse von
LEFT JOIN
undRIGHT JOIN
, einschließlich der nicht übereinstimmenden Zeilen aus beiden Tabellen.
8. Was ist der Unterschied zwischen DELETE, TRUNCATE und DROP in MySQL?
Befehle wie DELETE
, TRUNCATE
und DROP
hören sich vielleicht ähnlich an, aber sie verhalten sich tatsächlich unterschiedlich:
- LÖSCHEN: Entfernt Zeilen aus einer Tabelle auf der Grundlage einer Bedingung. Sie kann zurückgenommen werden, wenn sie sich innerhalb einer Transaktion befindet. Beispiel:
DELETE FROM employees WHERE department_id = 5;
- TRUNCATE: Löscht alle Zeilen aus einer Tabelle, die Struktur der Tabelle bleibt jedoch erhalten. Sie ist schneller als
DELETE
und kann nicht rückgängig gemacht werden. Beispiel:
TRUNCATE TABLE employees;
- DROP: Entfernt die Struktur und die Daten der Tabelle vollständig, zusammen mit allen Abhängigkeiten wie Indizes. Beispiel:
DROP TABLE employees;
9. Wie erstellt und ändert man eine Tabelle in MySQL? Nenne Beispiele.
Zum Erstellen von Tabellen kannst du die Anweisung CREATE TABLE
verwenden, zum Ändern in der Regel die Anweisung ALTER TABLE
. Hier sind einige Beispiele:
- Tabelle erstellen:
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50));
- Ändern, um eine Spalte hinzuzufü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. Sobald wir die Sitzung schließen, wird die Tabelle gelöscht. In dieser Art von Tabelle können Zwischenergebnisse zwischengespeichert werden. Wir können sie zum Testen, Filtern oder Aufbereiten von Daten verwenden, bevor wir sie in eine permanente Tabelle einfügen.
Hier ist ein 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 Subquery in MySQL? Erkläre das anhand eines Beispiels.
Eine Subquery (auch bekannt als verschachtelte Abfrage) ist in einer anderen Abfrage verschachtelt. Sie zerlegt komplexe Datenbankoperationen in überschaubare Schritte. Du kannst zum Beispiel eine Unterabfrage erstellen, um Mitarbeiter zu finden, die mehr als den Durchschnittslohn verdienen:
SELECT first_name, last_name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);
Lass uns das mal aufschlüsseln:
- Die innere Abfrage
SELECT AVG(salary) FROM employees
berechnet zuerst das Durchschnittsgehalt. - Die äußere Abfrage verwendet dann diesen Durchschnitt, um Arbeitnehmer zu finden, die mehr verdienen als dieser Durchschnitt.
12. Wie würdest du eine INSERT-Anweisung in MySQL verwenden, um Daten zu einer Tabelle hinzuzufügen? Kennst du außerdem einige bewährte Methoden dafür?
Mit der Anweisung INSERT()
können wir Daten zu einer Tabelle hinzufügen. Die grundlegende Syntax lautet:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
Hier sind ein paar Best Practices, die du befolgen kannst, wenn ich die Anweisung INSERT()
verwende:
- Listen Sie Ihre Spalten explizit auf. Das macht den Code übersichtlicher und verhindert Fehler, wenn sich die Struktur der Tabelle später ändert.
- Für
AUTO_INCREMENT
Spalten wie IDs, überspringe sie in derINSERT()
Anweisung. MySQL behandelt diese automatisch, um doppelte IDs zu vermeiden. - Sei konsequent mit Anführungszeichen. Ich persönlich bevorzuge einfache Anführungszeichen, aber beides funktioniert.
- Wenn du mehrere Zeilen einfügst, kannst du dies in einer einzigen Anweisung tun, um die Leistung zu verbessern.
13. Welche Bedeutung hat das Attribut AUTO_INCREMENT in MySQL?
Das Attribut AUTO_INCREMENT
in MySQL erzeugt eindeutige, fortlaufende Nummern für eine Spalte, in der Regel den Primärschlüssel einer Tabelle.
Hier ist ein Beispiel dafür, wie du eine Tabelle mit einer AUTO_INCREMENT
Spalte erstellst:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
Und um Zeilen darin einzufügen:
INSERT INTO employees (name, department) VALUES ('John Doe', 'Sales');
INSERT INTO employees (name, department) VALUES ('Jane Smith', 'Marketing');
14. Was ist ein View in MySQL?
Eine Ansicht ist eine gespeicherte Abfrage, die wie eine virtuelle Tabelle funktioniert. Damit können wir eine komplexe Abfrage nehmen, ihr einen Namen geben und sie wie eine Tabelle für zukünftige Abfragen verwenden. Auf diese Weise musst du nicht jedes Mal die gesamte Abfrage neu eingeben.
Um zum Beispiel die Abfrage von Mitarbeiterdetails zusammen mit ihren Abteilungsnamen zu vereinfachen, kannst du eine Ansicht erstellen:
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;
Du kannst die Ansicht employee_details
jetzt genau wie eine Tabelle abfragen:
SELECT * FROM employee_details;
Wir können jedoch keine Ansichten zum Einfügen und Aktualisieren der Daten verwenden. Die meisten unterstützen die Nur-Lese-Option und verhindern, dass Nutzer auf die Datenbank zugreifen können, was die Datensicherheit erhöht. Ansichten können manchmal Abfragen verlangsamen, da sie bei jedem Zugriff die zugrunde liegende Abfrage ausführen.
SQL Upskilling für Einsteiger
MySQL-Interview-Fragen für Fortgeschrittene
In diesem Abschnitt behandeln wir Themen der Mittelstufe. Diese Fragen werden vor allem gestellt, um dein Wissen über MySQL-Datentypen und -Strukturen zu testen.
15. Was sind Tabellen mit Systemversionen, und wie funktionieren sie?
Systemversionierte Tabellen enthalten eine vollständige Historie der Änderungen, die in einer Tabelle vorgenommen wurden. Da sie frühere Versionen jeder Zeile aufbewahren, können wir sie nutzen, um Daten zu prüfen und wiederherzustellen.
Sie funktionieren, indem sie zwei zusätzliche Spalten - StartTime
und EndTime
- hinzufügen, um aufzuzeichnen, wann jede Zeile gültig ist. Wenn wir Daten einfügen, aktualisieren oder löschen, werden diese Zeitstempel aktualisiert:
- Einfügen: Eine neue Zeile wird hinzugefügt, wobei
StartTime
auf den aktuellen Zeitstempel undEndTime
auf9999-12-31 23:59:59
(oder einen ähnlichen Wert, der "für immer" steht) gesetzt wird. Dies zeigt an, dass die Zeile derzeit gültig ist. - Update: Die ursprüngliche Zeile
EndTime
wird mit dem aktuellen Zeitstempel aktualisiert, um sie als nicht mehr gültig zu kennzeichnen. Dann wird eine neue Zeile mit den aktualisierten Daten erstellt, derenStartTime
auf den aktuellen Zeitstempel undEndTime
auf "für immer" gesetzt wird. - Löschen: Die
EndTime
der bestehenden Zeile wird auf den aktuellen Zeitstempel aktualisiert, um anzuzeigen, dass die Zeile nicht mehr gültig ist.
Mit der SQL-Klausel FOR SYSTEM_TIME
kannst du die Tabelle abfragen, um ihren Zustand zu einem bestimmten Zeitpunkt oder über einen bestimmten Zeitraum hinweg zu sehen. Zum Beispiel:
FOR SYSTEM_TIME AS OF '2024-01-01'
: Ruft den Zustand der Tabelle am 1. Januar 2024 ab.FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31'
: Zeigt alle Zeilen an, die innerhalb dieses Datumsbereichs gültig sind.
16. Was sind MySQL-Transaktionen und wie benutzt man sie?
Vorgänge sind eine Reihe von Operationen, die als eine Einheit ausgeführt werden. Sie stellen die Datenintegrität sicher, indem sie es ermöglichen, dass alle Vorgänge gemeinsam gelingen oder fehlschlagen.
Hier ist ein Beispiel für ihre Verwendung:
START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE account_id = 2;
COMMIT; -- Saves changes permanently
-- or
ROLLBACK; -- Reverts changes
17. Was ist ein Standard-Constraint in MySQL? Wie legt man einen Standardwert für eine Spalte fest?
Eine Standardbeschränkung in MySQL weist einer Spalte einen Standardwert zu, wenn während einer INSERT
Operation kein expliziter Wert angegeben wird. Dadurch wird sichergestellt, dass die Spalte auch dann gültig ist, wenn der/die Nutzer/in sie bei der Dateneingabe auslässt.
Hier erfährst du, wie du eine Tabelle mit einem Standardwert erstellst:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
status VARCHAR(10) DEFAULT 'active'
);
Dann kannst du eine Zeile einfügen, ohne die status
anzugeben:
INSERT INTO employees (name) VALUES ('John Doe');
Dieser Ansatz verringert die Wahrscheinlichkeit von NULL
oder ungültigen Daten in kritischen Spalten und vereinfacht die Abfragen, da die Standardfälle nicht mehr explizit behandelt werden müssen.
Ergebnis:
Feld |
Typ |
Null |
Schlüssel |
Standard |
Extra |
id |
INT |
NO |
PRI |
NULL |
AUTO_INCREMENT |
Name |
VARCHAR(50) |
YES |
NULL |
||
status |
VARCHAR(10) |
YES |
aktiv |
Dieser Befehl ist nützlich, weil:
- Es hilft Entwicklern, das Tabellenschema zu verstehen, bevor sie Abfragen schreiben.
- Sie kann zum Debuggen verwendet werden, besonders wenn du mit unbekannten Datenbanken arbeitest.
- Sie identifiziert schnell Einschränkungen wie Primärschlüssel oder Standardwerte.
19. Wie würdest du String-Funktionen in SQL verwenden, um Text zu verwalten?
Verschiedene String-Funktionen in SQL arbeiten mit Namen und anderen Textdaten. Zum Beispiel:
- Die Funktion
LENGTH()
zeigt die Anzahl der Zeichen in einem Namen an. UPPER()
undLOWER()
konvertieren Text in Groß- oder Kleinbuchstaben.CONCAT()
Funktion verknüpft den Vor- und Nachnamen in einer Spalte.SUBSTRING()
extrahiert bestimmte Teile des Textes. Wir können ihn zum Beispiel verwenden, um den Monat vom Geburtsdatum zu trennen.
Hier ist eine 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 Anfrage:
- Wandelt Namen in Großbuchstaben um.
- Kombiniert Vor- und Nachnamen zu einem vollständigen Namen.
- Extrahiert den Geburtsmonat aus einer
birthdate
Spalte. - Schneidet Leerzeichen aus Nachnamen ab.
- Ersetzt alle Vorkommen von "a" durch "@" in Vornamen.
20. Wie würdest du eine bestimmte Zeile in einer Datenbank mit SQL aktualisieren?
Du kannst die Anweisung UPDATE
und die Klausel WHERE
verwenden, um den Datensatz zu identifizieren, den du ändern möchtest.
Wenn du zum Beispiel das Genre des Films "Inception" von 2010 auf "Sci-fi" aktualisieren möchtest, kannst du die folgende Abfrage verwenden:
UPDATE movies
SET genre = 'Sci-Fi'
WHERE movie_title = 'Inception' AND year = 2010;
Hier gibt UPDATE movies
die Tabelle an, die wir aktualisieren wollen, und die WHERE
Klausel zielt auf die Zeile mit dem Titel "Inception" und dem Jahr "2010".
Fortgeschrittene MySQL-Interview-Fragen
Die Fragen im Vorstellungsgespräch für Fortgeschrittene testen deine Fähigkeit, komplexe MySQL-Szenarien zu bewältigen und geben dem Interviewer einen Eindruck von deinen Entscheidungsfähigkeiten.
21. Was ist ein Trigger in MySQL? Wie setzt du es um?
In MySQL ist ein Trigger eine Reihe von Aktionen, die ausgeführt werden, wenn ein Datenbankereignis eintritt. Auslöser können so konfiguriert werden, dass sie vor oder nach Ereignissen wie INSERT
, UPDATE
oder DELETE
ausgeführt werden.
Nehmen wir zum Beispiel an, es gibt eine Tabelle orders
, in die neue Bestellungen eingetragen werden. Wir können einen Trigger erstellen, der jede neue Bestellung in einer Tabelle order_history
protokolliert:
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;
Nachdem der Trigger ausgeführt wurde, wird die Tabelle order_history
automatisch aktualisiert:
history_id |
order_id |
Aktion |
Zeitstempel |
1 |
1 |
eingefügt |
2024-12-24 10:00:00 |
2 |
2 |
eingefügt |
2024-12-24 11:00:00 |
22. Warum macht das Hinzufügen eines Indexes SQL-Abfragen schneller?
Wenn es keinen Index gibt, muss die Datenbank jede Zeile durchsuchen, um einen bestimmten Eintrag zu finden. Ein Index funktioniert wie ein Inhaltsverzeichnis, das es der Datenbank ermöglicht, auf die relevanten Zeilen zuzugreifen. Wenn du also einen Index hinzufügst, verkürzt sich die Suchzeit und die Abfragen werden schneller ausgeführt.
Indizes werden in der Regel mit Datenstrukturen wie B-Trees oder Hash-Tabellen implementiert, die es der Datenbank ermöglichen, Suchvorgänge, Lookups und Range Scans effizient durchzuführen.
Hier ist ein Beispiel dafür, wie du einen Index erstellst:
-- Without an index:
SELECT * FROM employees WHERE last_name = 'Smith';
-- Adding an index on the last_name column:
CREATE INDEX idx_last_name ON employees(last_name);
-- With the index, the database can quickly locate rows with 'Smith' in the last_name column.
Indizes haben zum Beispiel einige Nachteile:
- Langsamere Schreibvorgänge:
INSERT
,UPDATE
, undDELETE operations are slower because the index must be updated each time data changes.
- Lagerkosten: Indizes benötigen zusätzlichen Speicherplatz.
23. Welchen Datentyp verwenden wir für das Gewicht und den Preis des Produkts in einer SQL-Tabelle und warum?
Wir verwenden den Datentyp FLOAT
oder REAL
, um das Gewicht zu speichern, weil das Gewicht oft Dezimalwerte enthält und eine kleine Fehlermarge zulässt. Da diese Datentypen Näherungswerte speichern können, sind sie besser für Gewichtsspalten geeignet.
Der Datentyp DECIMAL
wird häufig für die Speicherung von Preisen verwendet, da finanzielle Werte wie Preise keine Rundungsfehler zulassen. Diese Genauigkeit gibt es nur beim Dezimaltyp (z. B. DECIMAL(10, 2)
für 10 Stellen, mit 2 nach dem Komma).
24. Wie findet man doppelte Zeilen in SQL mit einer Fensterfunktion?
Hier erfährst du, wie du mit der Fensterfunktion ROW_NUMBER()
Duplikate finden kannst:
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;
Schauen wir uns an, wie das funktioniert:
1. ROW_NUMBER()
weist jeder Zeile in unserem Ergebnis eine Nummer zu.
2. PARTITION BY
gruppiert die Zeilen nach product_name
und category
.
3. Innerhalb jeder Gruppe sind die Zeilen von 1 an nummeriert.
4. Jede row_num
, die größer als 1 ist, zeigt ein Duplikat an.
Zum Beispiel, wenn wir diese Datensätze haben:
- Produkt A, Kategorie X, row_num = 1
- Produkt A, Kategorie X, row_num = 2 (Duplikat)
- Product B, Category Y, row_num = 1
Die Abfrage zeigt uns die zweite Zeile, da ihre row_num
größer als 1 ist.
25. Wie erstellt und verwendet man eine Stored Procedure mit Parametern in MySQL? Erkläre das anhand eines Beispiels.
Wir können komplexe Abfragen mit gespeicherten Prozeduren speichern und wiederverwenden, um Datenbankoperationen effizienter und wartbarer zu machen. Anhand eines praktischen Beispiels wollen wir sehen, wie man sie mit Parametern erstellt und verwendet.
Angenommen, wir haben eine Schülerdatenbank und wollen eine Prozedur erstellen, um Schüler nach ihrem Alter zu filtern. So können wir es schaffen:
Erstellen wir zunächst eine einfache gespeicherte Prozedur, die einen Altersparameter benötigt:
CREATE PROCEDURE get_student_info(IN age INT)
BEGIN
SELECT * FROM student WHERE student.age = age;
END;
Um dieses Verfahren anzuwenden, geben wir einfach CALL
mit unserem gewünschten Alter an:
CALL get_student_info(21);
Wir können unsere Verfahren durch die Verwendung von Ausgabeparametern anspruchsvoller gestalten. Lass uns zum Beispiel eine Prozedur erstellen, die Schüler eines bestimmten Alters zählt:
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;
Um das Ergebnis dieses Verfahrens zu erhalten:
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?
Die referentielle Integrität sorgt dafür, dass die Beziehungen zwischen den Tabellen korrekt sind. Wenn wir einen Fremdschlüssel erstellen, sorgt er dafür, dass die Werte in einer Tabelle mit dem eindeutigen Wert in der referenzierten Tabelle übereinstimmen.
Hier ist ein praktisches Beispiel: Angenommen, du verwaltest eine E-Commerce-Datenbank. Du hast eine Tabelle Customers
und eine Tabelle Orders
. Jede Bestellung muss zu einem echten Kunden gehören. Die referentielle Integrität, die durch Fremdschlüssel implementiert wird, stellt diese Beziehung sicher, indem sie gewährleistet:
- Du kannst keine Bestellung für einen nicht existierenden Kunden erstellen.
- Du kannst einen Kunden mit bestehenden Bestellungen nicht löschen (es sei denn, du konfigurierst ausdrücklich, was mit diesen Bestellungen geschehen soll).
- Du kannst die ID eines Kunden nicht aktualisieren, wenn dieser Kunde bereits Bestellungen hat.
Wenn du also eine Fremdschlüssel-Beschränkung wie diese erstellst:
ALTER TABLE Orders
ADD FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);
Die Datenbank setzt diese Regeln automatisch durch:
- Jedes
CustomerID
in der TabelleOrders
muss in der TabelleCustomers
vorhanden sein. - Versuche, diese Regeln zu verletzen (wie das Einfügen eines ungültigen
CustomerID
), werden zurückgewiesen.
So werden Dateninkonsistenzen vermieden, die zu ernsthaften Problemen führen könnten, z. B. Bestellungen, die nicht zu den tatsächlichen Kunden zurückverfolgt werden können, oder Berichte, die mit fehlenden Kundeninformationen erstellt werden.
MySQL-Interviewfragen für Datenbankadministratoren
Wenn du dich speziell für eine Stelle als Datenbankadministrator/in bewirbst, findest du hier einige Fragen, die Personalverantwortliche stellen können.
27. Warum sollte eine große Anwendung Datenbank-Sharding verwenden? Erzähl mir auch von den Herausforderungen, die damit verbunden sind.
Eine große Anwendung verwendet Datenbank-Sharing, um große Daten auf mehrere Server aufzuteilen. Jeder Teil oder Splitter enthält einen kleinen Teil der Daten. Da es die Datenlast verteilt, ist keine High-End-Hardware erforderlich. Obwohl die Geschwindigkeit und Skalierbarkeit verbessert werden, gibt es auch hier einige Herausforderungen:
- Einige Abfragen wie z. B. Joins funktionieren möglicherweise nicht, was die Datenverwaltung erschweren kann.
- Wenn die Daten wachsen, können die Shards überlastet werden und Hotspots entstehen, die die Leistung verlangsamen.
28. Erkläre die Rolle der Redo-Logs bei der Wiederherstellung von MySQL-Abstürzen.
Jedes Mal, wenn Daten in MySQL geändert werden, müssen sie auf die Festplatte geschrieben werden. Das direkte Schreiben in Datendateien ist jedoch langsam und riskant. Deshalb schreibt MySQL, bevor er Datendateien ändert, zuerst in das Redo-Log, was er tun wird. Das ist sicherer als eine zufällige Aktualisierung der Dateien.
Nehmen wir also an, du aktualisierst die Adresse eines Kunden:
- MySQL schreibt diese Änderung zunächst in das Redo-Log.
- Er bestätigt dann deine Transaktion als bestätigt.
- Schließlich wird die Änderung auf die eigentlichen Datendateien angewendet.
Crash Recovery ist wichtig, wenn MySQL nach Schritt 1 oder 2, aber vor Schritt 3 abstürzt. Wenn MySQL neu startet, sieht er sich seine Redo-Logs an und schließt dann alle noch nicht abgeschlossenen Arbeiten ab, indem er die in den Redo-Logs aufgezeichneten Änderungen erneut abspielt. Das garantiert, dass festgeschriebene Transaktionen nicht verloren gehen, selbst wenn MySQL zu einem ungünstigen Zeitpunkt abstürzt.
29. Welche verschiedenen Speicher-Engines gibt es in MySQL, und wie unterscheiden sie sich?
MySQL unterstützt mehrere Speicher-Engines, die jeweils für unterschiedliche Anwendungsfälle optimiert sind. Hier ist ein Vergleich der gängigsten Varianten:
Speicher-Engine |
Eigenschaften |
Anwendungsfälle |
InnoDB |
- Standard-Speicher-Engine. - ACID-konform. - Sperren auf Zeilenebene. - Unterstützt Transaktionen und Fremdschlüssel. |
Anwendungen, die eine hohe Datenintegrität erfordern, wie z. B. E-Commerce-Plattformen oder Finanzsysteme. |
MyISAM |
- Schnell für leseintensive Operationen. - Sperren auf Tabellenebene. - Keine Unterstützung für Transaktionen oder Fremdschlüssel. |
Leseintensive Anwendungen, bei denen die Geschwindigkeit wichtiger ist als die Datenintegrität. |
Speicher |
- Speichert Daten im RAM. - Äußerst schnell. - Die Daten gehen beim Neustart verloren. - Begrenzte Größe. |
Temporäre Datenspeicherung, Caching oder Sitzungsmanagement. |
CSV |
- Speichert Daten in einfachen CSV-Dateien. - Einfache Integration mit externen Tools. - Keine Unterstützung der Indizierung. |
Datenaustausch zwischen Anwendungen oder zur einfachen Datenspeicherung ohne komplexe Abfrageanforderungen. |
Archiv |
- Optimiert für hohe Kompression. - Unterstützt nur INSERT- und SELECT-Operationen. - Keine Indizes. |
Speicherung von historischen oder Protokolldaten, wenn die Daten nur selten abgerufen werden. |
NDB (geclustert) |
- Verteilter Speicher für MySQL Cluster. - Hohe Verfügbarkeit und Fehlertoleranz. - Unterstützt Transaktionen. |
Groß angelegte verteilte Anwendungen, die eine Echtzeitleistung erfordern. |
30. Wie würdest du eine Standard-Speicher-Engine in MySQL festlegen?
Zuerst kannst du die aktuelle Standard-Speicher-Engine überprüfen:
SHOW ENGINES;
InnoDB wird als Standard-Engine empfohlen, da sie wichtige Funktionen wie
- ACID-konforme Transaktionen
- Fremdschlüssel-Beschränkungen
- Crash Recovery
- Sperren auf Zeilenebene
Um die Standard-Engine für meine aktuelle Sitzung vorübergehend zu ändern, kannst du Folgendes verwenden:
SET default_storage_engine = 'InnoDB';
Für eine dauerhafte Änderung kannst du die MySQL-Konfigurationsdatei ändern, indem du diese Zeile unter dem Abschnitt [mysqld]
hinzufügst:
default-storage-engine = InnoDB
31. Wie kann man beschädigte Tabellen in MySQL reparieren?
Zuerst kannst du mit diesem Befehl alle Datenbanken überprüfen:
mysqlcheck --check --all-databases -u root -p
Es scannt alle Tabellen und meldet, wenn sie beschädigt sind. Dann kannst du die folgende Abfrage ausführen, um die Tabelle zu reparieren:
mysqlcheck --repair database_name table_name -u root -p
Reparaturen können bei starker Beschädigung zu Datenverlusten führen, also stelle sicher, dass du deine Daten sicherst.
Szenariobasierte und problemlösende MySQL-Interviewfragen
Diese Fragen bewerten deine Erfahrung mit komplexen Szenarien und deine Problemlösungsfähigkeiten.
32. Erkläre ein Szenario, in dem du Subqueries in MySQL benutzt hast.
Hier erfährst du, wie du auf eine Frage wie diese antworten kannst:
In meinem letzten Job habe ich die Datenbank eines E-Commerce-Shops verwaltet und musste einen Produktbericht erstellen. Das Ziel war es, Produkte zu finden, die überdurchschnittliche Umsätze generieren, was die Verwendung von Unterabfragen für diese mehrstufige Analyse erforderte.
Hier ist die SQL-Abfrage, die ich zur Lösung dieses Problems entwickelt habe:
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;
Als Erstes habe ich unsere Ausgangsbasis ermittelt, indem ich den durchschnittlichen Verkaufsbetrag für alle Produkte berechnet habe. Dazu habe ich eine Unterabfrage in der WHERE
Klausel verwendet, die AVG(sales_amount)
aus der Tabelle mit den Verkäufen berechnet. Diese Unterabfrage diente als dynamischer Schwellenwert, an dem die Leistung der einzelnen Produkte gemessen werden konnte.
Die Hauptabfrage verknüpfte dann die Tabellen "Produkte" und "Verkäufe", um relevante Produktdetails zu erhalten, während die WHERE
Klausel alle Produkte herausfilterte, deren Verkäufe unter unserem berechneten Durchschnitt lagen.
Indem ich die Abfrage auf diese Weise strukturierte, konnte ich leistungsstarke Produkte in einem einzigen Datenbankvorgang identifizieren, anstatt mehrere separate Abfragen durchzuführen.
33. Kannst du eine Situation erklären, in der du SQL-Joins verwendet hast, um Daten aus mehreren Tabellen zu kombinieren?
Hier ist eine Beispielantwort auf die obige Frage:
Kürzlich habe ich an einem Projekt gearbeitet, bei dem wir zwei Tabellen hatten - eine mit Produktverkaufsdaten und eine weitere mit Produktdetails. Meine Aufgabe war es, einen Bericht zu erstellen, der sales
, product name
, category
und price
zeigt.
Um die relevanten Daten zu kombinieren, habe ich einen INNER JOIN über die gemeinsame Spalte product_id
verwendet, um die Verkaufstransaktionen mit den 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 Bericht lieferte ein klares Bild der Verkaufstrends und half den Beteiligten zu erkennen, welche Produktkategorien gut liefen und welche besondere Aufmerksamkeit erforderten.
34. Hast du Erfahrungen mit Triggern? Erkläre, wie du sie benutzt hast.
Hier ist ein Beispiel für eine Antwort auf die obige Frage:
Ja, ich habe umfangreiche Erfahrung mit Datenbank-Triggern. In meiner letzten Funktion habe ich einen AFTER UPDATE
Auslöser für die Prüfung von Preisänderungen eingeführt.
Lass mich dir die konkrete Umsetzung erläutern: Ich habe einen Trigger erstellt, der automatisch den Preisverlauf erfasst, wenn sich ein Produktpreis ändert. Hier ist das SQL-Skript, das ich entwickelt habe:
CREATE TRIGGER tr_AuditPriceChanges
ON Products
AFTER UPDATE AS
BEGIN
-- Only execute if the price was actually changed
IF UPDATE(UnitPrice)
BEGIN
INSERT INTO PriceAudit (
ProductID,
OldPrice,
NewPrice,
ChangedBy,
ChangeDate,
PercentageChange
)
SELECT
i.ProductID,
d.UnitPrice AS OldPrice,
i.UnitPrice AS NewPrice,
SYSTEM_USER,
GETDATE(),
ROUND(((i.UnitPrice - d.UnitPrice) / d.UnitPrice * 100), 2)
FROM INSERTED i
JOIN DELETED d ON i.ProductID = d.ProductID
WHERE i.UnitPrice <> d.UnitPrice;
END
END;
Was diese Lösung besonders effektiv machte, war:
- Sie wird nur ausgelöst, wenn es tatsächlich zu Preisänderungen kommt.
- Sie hält den Benutzer fest, der die Änderung mit
SYSTEM_USER
vornimmt. - Sie berechnet die prozentuale Veränderung für Berichtszwecke.
- Sie enthält eine
WHERE
Klausel, um Nicht-Änderungen herauszufiltern, die durch andere Spaltenaktualisierungen entstehen könnten.
Ich habe auch eine Fehlerbehandlung und Protokollierung hinzugefügt, als wir einige Randfälle mit NULL
Preisen bemerkten.
Tipps zur Vorbereitung auf ein MySQL-Interview
Wenn du am Anfang deiner Karriere stehst, findest du hier ein paar Tipps, die dir helfen werden, dein nächstes Vorstellungsgespräch zu meistern:
Beherrsche die Kernkonzepte von MySQL: Learn die Datenbankgrundlagen wie Indexierungg, Transaktionen und Abfrageoptimierung. Verstehen, wie MySQL Abfragen verarbeitet und die Datenspeicherung verwaltet. Das wird dir helfen, effiziente Fragen zu schreiben und deine Lösungen im Vorstellungsgespräch zu erklären.
Mach praktische Erfahrungen: Installiere MySQL auf deinem Computer und praktizieree regelmäßig. Erstelle Testdatenbanken, schreibe verschiedene Arten von Abfragen und versuche, sie zu optimieren. Echtes Üben ist der beste Weg, um zu lernen, wie die Dinge funktionieren und Selbstvertrauen für das Vorstellungsgespräch aufzubauen.
Um dein Wissen aufzufrischen, schau dir die Ressourcen des DataCamps an:
- Für die SQL-Einführung: Einführung in SQL Kurs
- Zum Üben von SQL: Anwendung von SQL auf reale Probleme
Lerne die MySQL-Werkzeuge und -Integrationen kennen: Mach dich mit der MySQL Workbench oder anderen Werkzeugen zur Datenbankverwaltung und grundlegenden Überwachung vertraut. You kannst auch erkunden , wie MySQL mit Python und den entsprechenden Frameworks zusammenarbeitet , und so zeigen, dass du in einer echten Entwicklungsumgebung arbeiten kannst.
Fazit
Da hast du es! Ich habe die 34 besten MySQL-Interview-Fragen zusammengestellt, die dir helfen, deinen nächsten Job zu bekommen. Egal, ob du dich für eine Einstiegsposition oder eine fortgeschrittene Stelle als Datenadministrator/in bewirbst, du musst die Grundlagen von MySQL, die Optimierung von Abfragen und die Verwaltung von Datenbanken gut beherrschen, um dich von der Konkurrenz abzuheben.
Wenn du dein Wissen über andere Datenbankmanagementsysteme erweitern möchtest, schau dir die DataCamp's SQL-Kurse.
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.
Lerne mehr über SQL mit diesen Kursen!
Kurs
Joining Data in SQL
Kurs
Data Manipulation in SQL
Der Blog
Die 32 besten AWS-Interview-Fragen und Antworten für 2024
Der Blog
Die 20 besten Snowflake-Interview-Fragen für alle Niveaus
Nisha Arya Ahmed
20 Min.
Der Blog
Top 30 Generative KI Interview Fragen und Antworten für 2024
Hesam Sheikh Hassani
15 Min.