Hoppa till huvudinnehållet

Topp 34 MySQL-intervjufrågor och svar för 2026

Bemästra MySQL med den här guiden till intervjufrågor, med exempel från verkligheten och experttips som hjälper dig briljera på din nästa databasintervju!
Uppdaterad 2 juni 2026  · 15 min läsa

Har du lagt märke till att MySQL efterfrågas i nästan varje jobbannons som rör databaser? Det finns en bra anledning till det — MySQL driver i princip allt från dina favoritplattformar för sociala medier till apparna du använder dagligen.

Jag har satt ihop den här guiden för att hjälpa dig hantera MySQL-intervjufrågor. Jag går igenom allt från grunderna som juniora utvecklare bör kunna till mer avancerade områden som krävs för seniora roller. Jag delar också några tips för att hjälpa dig uppträda tryggt i dina nästa datarelaterade intervjuer. 

Vad är MySQL?

MySQL är ett öppen källkods-baserat RDBMS (relational database management system) byggt på SQL som organiserar data i strukturerade tabeller. Det utvecklades av Oracle Corporation.

Det rankades som den mest populära DBMS:en 2024. En Stack Overflow Developer Survey 2025 visade dock att PostgreSQL rankades som den mest använda databasen bland professionella utvecklare och gick om MySQL för första gången.

Missförstå mig inte: MySQL är fortfarande enormt populärt — med 40,5 % användning bland utvecklare 2025 — och driver fortfarande otaliga webbapplikationer, innehållshanteringssystem och företagsverktyg. Och särskilt om du arbetar med webbapplikationer eller LAMP-stacken är MySQL en förstklassig kompetens att ha.

Graf som visar de mest populära databassystemen 2024, där MySQL är det mest populära, följt av PostgreSQL.

År 2024 var MySQL världens mest populära öppna DBMS, med ett rankingresultat på 1061. Källa: Statista.

Grundläggande MySQL-intervjufrågor

I det inledande intervjuskedet kan intervjuaren ställa grundläggande frågor för att bedöma din förståelse av databaser och MySQL-koncept. 

1. Vad är en databas och hur skiljer den sig från ett DBMS? 

En databas är en lagringsbehållare som håller data som vi kan komma åt, ändra och analysera. Till exempel lagrar sociala medieplattformar data om vem som gillat våra inlägg i databaser.

Ett DBMS (Database Management System) är programvaran som låter oss interagera med och hantera den datan genom att skapa användare och styra deras åtkomst. MySQL är ett av de mest populära DBMS-alternativen. Andra exempel include PostgreSQL, MongoDB, och Microsoft SQL Server.

2. Hur skiljer sig MySQL från andra relationsdatabashanterare?

MySQL är ett relationsdatabashanteringssystem (RDBMS) med öppen källkod som använder SQL för att hantera data. Det är känt för sin enkelhet, hastighet och kompatibilitet med webbapplikationer. 

Så här skiljer sig MySQL från andra RDBMS:

  • Enkelhet och prestanda: MySQL hyllas ofta för sin enkelhet och optimerade prestanda, vilket gör det till ett förstahandsval för webbutvecklare och startups.
  • Avancerade funktioner: Även om MySQL utmärker sig i användarvänlighet kan det sakna avancerade funktioner som finns i andra RDBMS som PostgreSQL, såsom mer heltäckande stöd för ACID-transaktioner, avancerad indexering och ett bredare urval av datatyper.
  • Lagringsmotorer: MySQL låter dig välja olika lagringsmotorer (t.ex. InnoDB, MyISAM) per tabell, vilket ger flexibilitet för specifika användningsfall.

MySQL är idealiskt i scenarier som kräver hastighet och skalbarhet, men för mer komplexa eller företagsinriktade funktioner kan PostgreSQL vara ett bättre val.

3. Vilka är de viktigaste datatyperna i MySQL?

MySQL stöder en mängd datatyper i följande kategorier:

  • Numeriska: INT, DECIMAL, FLOAT, DOUBLE, etc.

  • Strängar: CHAR, VARCHAR, TEXT, BLOB.

  • Datum/tid: DATE, DATETIME, TIMESTAMP, TIME.

  • JSON: För att lagra JSON-objekt.

4. Vad är skillnaden mellan datatyperna INT och DECIMAL? 

INT lagrar heltal utan decimaler. Vi kan använda den när det inte finns behov av fraktioner. Däremot kan DECIMAL lagra finansiella värden och lämpar sig för precisa beräkningar med decimaler. 

5. Hur skiljer sig DATE från DATETIME i MySQL? 

Funktionen DATE i MySQL lagrar datum i formatet år, månad och dag: 

YYYY-MM-DD

Däremot lagrar DATETIME datum med tid, och ser ut så här: 

YYYY-MM-DD HH:MM:SS 

6. Vad är en främmande nyckel och hur använder du den i databaser? 

En främmande nyckel är ett fält i en tabell som länkar till primärnyckeln i en annan tabell. 

Till exempel, i en tabell customers som lagrar kundinformation har varje kund ett unikt customer_id — i en annan tabell som heter transactions (som lagrar köp), använder vi customer_id som främmande nyckel. customer_id i tabellen transactions länkar varje köp till en specifik kund i tabellen customers .

Så här ser det ut i SQL:

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. Vad är skillnaderna mellan INNER JOIN, LEFT JOIN, RIGHT JOIN och FULL JOIN?

Joins kombinerar rader från två eller flera tabeller baserat på relaterade kolumner. Här är skillnaderna:

  • INNER JOIN: Returnerar rader där det finns en matchning i båda tabellerna.

  • LEFT JOIN: Returnerar alla rader från vänstra tabellen och matchande rader från högra tabellen. Om det inte finns någon matchning returneras NULL för högra tabellens kolumner.

  • RIGHT JOIN: Liknar LEFT JOIN, men returnerar alla rader från högra tabellen och matchande rader från vänstra.

  • FULL JOIN: Kombinerar resultaten från LEFT JOIN och RIGHT JOIN, inklusive icke-matchande rader från båda tabellerna. Obs: MySQL stöder inte inbyggd FULL JOIN-syntax. För att uppnå samma resultat, använd en UNION av en LEFT JOIN och en RIGHT JOIN

8. Vad är skillnaden mellan DELETE, TRUNCATE och DROP i MySQL?

Kommandon som DELETE, TRUNCATE och DROP kan låta lika, men de beter sig olika:

DELETE: Tar bort rader från en tabell baserat på ett villkor. Det kan ångras om det körs inom en transaktion. Exempel:

DELETE FROM employees WHERE department_id = 5;

TRUNCATE: Tar bort alla rader från en tabell, men tabellstrukturen finns kvar. Det är snabbare än DELETE och kan inte ångras. Exempel:

TRUNCATE TABLE employees;

DROP: Tar helt bort tabellstrukturen och datan, tillsammans med beroenden som index. Exempel:

DROP TABLE employees;

9. Hur skapar och ändrar du en tabell i MySQL? Ge exempel.

För att skapa tabeller använder du CREATE TABLE, och för att ändra dem använder du vanligtvis ALTER TABLE. Här är några exempel:

Skapa tabell:

CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50));

Ändra för att lägga till en kolumn:

ALTER TABLE employees ADD COLUMN salary DECIMAL(10, 2);

10. Vad är en temporär tabell i SQL? 

En temporär tabell finns bara under den aktuella databassessionen. När vi stänger sessionen raderas tabellen. Den här typen av tabell kan tillfälligt lagra mellanresultat. Vi kan använda den för testning, filtrering eller förberedelse av data innan den förs in i en beständig tabell.

Här är ett exempel:

CREATE TEMPORARY TABLE temp_employees (
    id INT,
    name VARCHAR(50)
);
INSERT INTO temp_employees VALUES (1, 'John Doe');
SELECT * FROM temp_employees;

11. Vad är en subquery i MySQL? Förklara med ett exempel. 

En subquery (även kallad nästlad fråga) är inbäddad i en annan fråga. Den bryter ner komplexa databasoperationer i mer hanterbara steg. Till exempel kan du skapa en subquery för att hitta anställda som tjänar över genomsnittet: 

SELECT first_name, last_name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

Låt oss bryta ner detta:

  1. Den inre frågan SELECT AVG(salary) FROM employees beräknar först medellönen.

  2. Den yttre frågan använder sedan detta medel för att hitta anställda som tjänar över det. 

12. Hur använder du ett INSERT-kommando i MySQL för att lägga till data i en tabell? Har du också några bästa praxis för detta? 

Vi kan använda kommandot INSERT för att lägga till data i en tabell. Den grundläggande syntaxen är:

INSERT INTO table_name (column1, column2, ...) 
VALUES (value1, value2, ...); 

Här är några bästa praxis att följa när du använder INSERT-kommandot

  1. Lista uttryckligen dina kolumner. Det gör koden tydligare och förhindrar fel om tabellstrukturen ändras senare.

  2. För AUTO_INCREMENT-kolumner som ID hoppar du över dem i INSERT-kommandot. MySQL hanterar dessa automatiskt för att förhindra dubbletter av ID. 

  3. Var konsekvent med enkla eller dubbla citattecken för strängar. Jag föredrar personligen enkla citattecken, men båda fungerar.

  4. Om du lägger in flera rader kan du göra det i ett enda kommando för bättre prestanda.

13. Vad betyder attributet AUTO_INCREMENT i MySQL?

Attributet AUTO_INCREMENT i MySQL genererar unika, sekventiella nummer för en kolumn, vanligtvis tabellens primärnyckel.

Här är ett exempel på hur du skapar en tabell med en AUTO_INCREMENT-kolumn:

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    department VARCHAR(50)
);

Och så här lägger du in rader i den:

INSERT INTO employees (name, department) VALUES ('John Doe', 'Sales');
INSERT INTO employees (name, department) VALUES ('Jane Smith', 'Marketing');

14. Vad är en vy i MySQL? 

En vy är en sparad fråga som fungerar som en virtuell tabell. Med den kan vi ta en komplex fråga, ge den ett namn och använda den som en tabell i framtida frågor. På så sätt behöver du inte skriva om hela frågan varje gång.

Till exempel, för att förenkla hämtning av anställdas detaljer tillsammans med deras avdelningsnamn kan du skapa en vy:

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 kan nu fråga vyn employee_details precis som en tabell:

SELECT * FROM employee_details;

Vi kan dock inte använda vyer för att infoga och uppdatera data. De flesta stöder endast läsning och hindrar användare från direkt åtkomst till databasen, vilket stärker dataskyddet. Vyer kan ibland sakta ner frågor, eftersom de kör den underliggande frågan varje gång de nås.

Intermediära MySQL-intervjufrågor

I detta avsnitt tar vi upp ämnen på mellannivå. Dessa frågor ställs främst för att testa din kunskap om MySQL:s datatyper och struktur.

15. Vad är systemversionerade tabeller och hur fungerar de? 

Systemversionerade tabeller behåller en fullständig historik över förändringar som gjorts i en tabell. Eftersom de sparar tidigare versioner av varje rad kan vi använda dem för revision och återställning av data. 

De fungerar genom att lägga till två extra kolumner — StartTime och EndTime — för att registrera när varje rad är giltig. När vi infogar, uppdaterar eller tar bort data uppdateras dessa tidsstämplar:

  • Insert: En ny rad läggs till med StartTime satt till aktuell tidsstämpel och EndTime till 9999-12-31 23:59:59 — MySQL:s maximala DATETIME-värde, använt som en markör för att representera "denna rad är för närvarande aktiv"

  • Update: Den ursprungliga radens EndTime uppdateras till aktuell tidsstämpel för att markera den som inte längre giltig. Sedan skapas en ny rad med den uppdaterade datan, med StartTime satt till aktuell tidsstämpel och EndTime som "för alltid".

  • Delete: EndTime för den befintliga raden uppdateras till aktuell tidsstämpel, vilket indikerar att raden inte längre är giltig.

Med SQL:s FOR SYSTEM_TIME-klausul kan du fråga tabellen för att se dess tillstånd vid en specifik tidpunkt eller över ett tidsintervall. Till exempel:

  • FOR SYSTEM_TIME AS OF '2024-01-01': Hämtar tabellens tillstånd som det var den 1 januari 2024.

  • FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31': Visar alla rader som var giltiga inom detta datumintervall.

16. Vad är transaktioner i MySQL och hur använder du dem?

Transaktioner är en uppsättning operationer som körs som en enhet. De säkerställer dataintegritet genom att låta alla operationer lyckas eller misslyckas tillsammans.

Här är ett exempel på hur de används:

START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE account_id = 2;
COMMIT; -- Sparar ändringar permanent
-- eller
ROLLBACK; -- Återställer ändringar

17. Vad är ett standardvärdesvillkor (default constraint) i MySQL? Hur sätter du ett standardvärde för en kolumn?

Ett standardvärdesvillkor i MySQL tilldelar ett standardvärde till en kolumn när inget uttryckligt värde anges under en INSERT-operation. Detta säkerställer att kolumnen är giltig även om användaren utelämnar den vid inmatning.

Så här skapar du en tabell med ett standardvärde:

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    status VARCHAR(10) DEFAULT 'active'
);

Sedan kan du infoga en rad utan att ange status:

INSERT INTO employees (name) VALUES ('John Doe');

Detta minskar sannolikheten för NULL eller ogiltiga data i kritiska kolumner och förenklar frågor genom att ta bort behovet av att hantera standardfall uttryckligen.

Fält

Typ

Null

Nyckel

Standard

Extra

id

INT

NEJ

PRI

NULL

AUTO_INCREMENT

name

VARCHAR(50)

JA

 

NULL

 

status

VARCHAR(10)

JA

 

active

 

Det här kommandot är användbart eftersom:

  • Det hjälper utvecklare att förstå tabellschemat innan de skriver frågor.
  • Det kan användas för felsökning, särskilt när du arbetar med okända databaser.
  • Det identifierar snabbt begränsningar, såsom primärnycklar eller standardvärden.

18. Vad är skillnaden mellan CHAR och VARCHAR i MySQL?

Båda lagrar strängdata, men de hanterar lagring olika:

  • CHAR(n) lagrar alltid exakt n tecken och fyller ut med blanksteg om värdet är kortare. Det är fast längd, vilket gör den något snabbare för kolumner där alla värden har samma längd, som landskoder eller statusflaggor.

  • VARCHAR(n) lagrar endast de faktiska tecknen som matats in, upp till högst n. Den använder mindre lagring för data med varierande längd men har en liten overhead för att spåra längden.

CREATE TABLE example (
    country_code CHAR(2),      -- Always 2 chars, e.g. 'US', 'UK'
    email VARCHAR(255)         -- Variable length up to 255 chars
);

Som tumregel: använd CHAR för värden med fast längd, VARCHAR för allt annat.

19. Hur skulle du använda strängfunktioner i SQL för att hantera text? 

Olika strängfunktioner i SQL arbetar med namn och annan textdata. Till exempel:

  • Funktionen LENGTH() visar antalet tecken i ett namn. 

  • UPPER() och LOWER() konverterar text till enbart versaler respektive gemener. 

  • CONCAT() sammanfogar för- och efternamn i en kolumn. 

  • SUBSTRING() extraherar specifika delar av texten. Vi kan till exempel använda den för att separera månaden från födelsedatumet. 

Här är en exempel-fråga:

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;

Den här frågan:

  • Konverterar namn till versaler.

  • Kombinerar för- och efternamn till ett fullständigt namn.

  • Extraherar födelsemånad från kolumnen birthdate.

  • Trimmar blanksteg från efternamn.

  • Ersätter alla förekomster av "a" med "@" i förnamn.

20. Hur uppdaterar du en specifik rad i en databas med SQL?

Du kan använda kommandot UPDATE och WHERE-klausulen för att identifiera den post du vill ändra. 

Om du till exempel vill uppdatera genren för filmen ”Inception” från 2010 till ”Sci-fi” kan du använda följande fråga: 

UPDATE movies
SET genre = 'Sci-Fi'
WHERE movie_title = 'Inception' AND year = 2010;

Här anger UPDATE movies vilken tabell vi vill uppdatera, och WHERE-klausulen riktar in sig på raden där titeln är ”Inception” och året är ”2010”. 

Avancerade MySQL-intervjufrågor

Avancerade intervjufrågor testar din förmåga att hantera komplexa MySQL-scenarier och ger intervjuaren en bild av din beslutsförmåga. 

21. Vad är en trigger i MySQL? Hur implementerar du den? 

I MySQL är en trigger en uppsättning åtgärder som körs när en databas-händelse inträffar. Triggers kan konfigureras att köras före eller efter händelser som INSERT, UPDATE eller DELETE

Anta till exempel att det finns en tabell orders där nya beställningar läggs till. Vi kan skapa en trigger som loggar varje ny beställning i en tabell 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;

Efter att triggern körts, uppdateras tabellen order_history automatiskt:

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. Varför gör ett index SQL-frågor snabbare? 

Om det inte finns något index måste databasen skanna varje rad för att hitta en specifik post. Ett index fungerar som ett innehållsregister, vilket låter databasen komma åt relevanta rader. Att lägga till ett index minskar därför söktiden och gör att frågor körs snabbare. 

Index implementeras vanligtvis med datastrukturer som B-träd eller hashtabeller, vilket gör att databasen effektivt kan utföra sökningar, uppslag och intervallskanningar.

Så här skapar du ett index:

-- 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.

Index har vissa nackdelar, till exempel:

  • Långsammare skrivoperationer: INSERT, UPDATE och DELETE-operationer går långsammare eftersom indexet måste uppdateras varje gång data ändras.

  • Lagringskostnad: Index kräver ytterligare lagringsutrymme.

23. Vilken datatyp använder vi för en produkts vikt och pris i en SQL-tabell, och varför? 

För vikt är DECIMAL generellt det säkrare valet. Även om FLOAT och REAL kan lagra decimalvärden använder de flyttalsaritmetik, vilket kan introducera små avrundningsfel.

För produktvikter där noggrannhet spelar roll (t.ex. fraktberäkningar, lager), ger DECIMAL(8, 3) dig precis kontroll med 3 decimaler utan oväntade avrundningar. FLOAT är acceptabelt endast när en liten felmarginal är okej.

24. Hur hittar du dubblettrader i SQL med en fönsterfunktion? 

Så här kan du hitta dubbletter med fönsterfunktionen 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;

Låt oss förklara hur detta fungerar:

1. ROW_NUMBER() tilldelar ett nummer till varje rad i vårt resultat. 

2. PARTITION BY grupperar rader efter product_name och category

3. Inom varje grupp numreras raderna från 1. 

4. Alla row_num större än 1 indikerar en dubblett. 

Till exempel, om vi har dessa poster:

  • Produkt A, Kategori X, row_num = 1
  • Produkt A, Kategori X, row_num = 2 (dubblett)
  • Produkt B, Kategori Y, row_num = 1

Frågan visar då den andra raden eftersom dess row_num är större än 1.

25. Hur skapar och använder du en lagrad procedur med parametrar i MySQL? Förklara med ett exempel. 

Vi kan spara och återanvända komplexa frågor med lagrade procedurer för att göra databasoperationer mer effektiva och lättare att underhålla. Låt oss se hur man skapar och använder dem med parametrar genom ett praktiskt exempel.

Anta att vi har en studentdatabas och vill skapa en procedur för att filtrera studenter efter ålder. Så här kan vi göra:

Först skapar vi en enkel lagrad procedur som tar en åldersparameter:

CREATE PROCEDURE get_student_info(IN age INT)
BEGIN
    SELECT * FROM student WHERE student.age = age;
END;

För att använda den här proceduren CALL:ar vi den helt enkelt med önskad ålder:

CALL get_student_info(21);

Vi kan göra våra procedurer mer sofistikerade genom att använda utparametrar. Till exempel, låt oss skapa en procedur som räknar studenter i en specifik ålder:

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;

För att få resultatet från denna procedur:

SET @count = 0;
CALL count_students_by_age(21, @count);
SELECT @count AS total_students;

26. Varför är referensintegritet viktig i en databas? 

Referensintegritet håller relationerna mellan tabeller korrekta. När vi skapar en främmande nyckel säkerställer den att värdena i en tabell matchar det unika värdet i den refererade tabellen.

Ett praktiskt exempel: Anta att du hanterar en e-handelsdatabas. Du har en tabell Customers och en tabell Orders. Varje beställning måste tillhöra en verklig kund. Referensintegritet, implementerad genom främmande nycklar, upprätthåller detta genom att säkerställa att:

  • Du inte kan skapa en beställning för en kund som inte finns.
  • Du inte kan ta bort en kund som har befintliga beställningar (om du inte specifikt konfigurerar vad som ska hända med de beställningarna).
  • Du inte kan uppdatera en kunds ID om den kunden har befintliga beställningar.

När du skapar en främmande nyckel-begränsning som denna:

ALTER TABLE Orders
ADD FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);

Upprätthåller databasen automatiskt dessa regler:

  • Varje CustomerID i tabellen Orders måste finnas i tabellen Customers.

  • Försök att bryta mot dessa regler (som att infoga ett ogiltigt CustomerID) kommer att avvisas.

Detta förhindrar inkonsekvens i data som kan orsaka allvarliga problem, såsom beställningar som inte kan spåras till faktiska kunder eller rapporter med saknad kundinformation. 

MySQL-intervjufrågor för databasadministratörer

Om du specifikt söker en roll som databasadministratör är här några frågor som rekryterare kan ställa.

27. Varför skulle en stor applikation använda databasshardning? Berätta också om utmaningarna med det. 

En stor applikation använder shardning för att dela upp stora datamängder över flera servrar. Varje del, eller shard, innehåller en mindre del av datan. Eftersom belastningen sprids ut behövs ingen högpresterande hårdvara. Även om hastigheten och skalbarheten förbättras innebär det också vissa utmaningar: 

  • Vissa frågor, som joins, kanske inte fungerar, vilket kan försvåra datahanteringen. 
  • När datan växer kan shards bli överbelastade, vilket skapar hotspots som försämrar prestandan. 

28. Förklara redo-loggarnas roll i MySQL vid kraschåterställning. 

Varje gång data ändras i MySQL måste det skrivas till disk. Att skriva direkt till datafiler är dock långsamt och riskabelt. Därför, innan MySQL ändrar några datafiler, skriver det först ner vad som ska göras i redo-loggen. Detta är säkrare än att uppdatera datafiler slumpmässigt.

Säg till exempel att du uppdaterar en kunds adress:

  1. MySQL skriver först denna ändring till redo-loggen.
  2. Det bekräftar sedan din transaktion som committad.
  3. Till slut tillämpar det ändringen på de faktiska datafilerna.

Kraschåterställning är viktig om MySQL kraschar efter steg 1 eller 2 men före steg 3. När MySQL startar om tittar det i sina redo-loggar och slutför sedan eventuellt ofärdigt arbete genom att spela upp ändringarna som registrerats i redo-loggarna. Detta garanterar att committade transaktioner inte går förlorade, även om MySQL kraschar vid ett olämpligt tillfälle.

29. Vilka olika lagringsmotorer finns i MySQL, och hur skiljer de sig?

MySQL stöder flera lagrings motorer, var och en optimerad för olika användningsfall. Här är en jämförelse av de vanligaste:

Lagringsmotor Nyckelfunktioner Bäst för
InnoDB Standardmotor. ACID-kompatibel, låsning på radnivå, transaktioner och främmande nycklar. E-handel, finansiella system, allt som kräver dataintegritet.
MyISAM Snabba läsningar, låsning på tabellnivå. Inga transaktioner eller främmande nycklar. Läsintensiva appar där hastighet är viktigare än integritet.
Memory Data lagras i RAM. Extremt snabbt men förloras vid omstart. Caching, sessionshantering, temporär data.
CSV Lagrar data som enkla CSV-filer. Ingen indexering. Datautbyte mellan appar eller enkel flatfilslagring.
Archive Hög komprimering. Endast INSERT och SELECT. Inga index. Loggdata eller historikposter som sällan frågas.
NDB (Clustered) Distribuerad lagring, hög tillgänglighet, feltolerant, stöd för transaktioner. Storskaliga distribuerade appar som kräver prestanda i realtid.

30. Hur ställer du in en standardlagringsmotor i MySQL? 

Först kan du kontrollera aktuell standardmotor:

SHOW ENGINES;

InnoDB rekommenderas som standardmotor eftersom den stödjer viktiga funktioner som:

  • ACID-kompatibla transaktioner
  • Främmande nyckel-begränsningar
  • Kraschåterställning
  • Låsning på radnivå

För att tillfälligt ändra standardmotor för min aktuella session kan du använda:

SET default_storage_engine = 'InnoDB';

För en permanent ändring kan du modifiera MySQL:s konfigurationsfil genom att lägga till denna rad under sektionen [mysqld]:

default-storage-engine = InnoDB

31. Hur reparerar du korrupta tabeller i MySQL? 

Först kan du kontrollera alla databaser med detta kommando: 

mysqlcheck --check --all-databases -u root -p

Det kommer att skanna alla tabeller och rapportera om det finns korruption. Sedan kan du köra följande kommando för att reparera tabellen: 

mysqlcheck --repair database_name table_name -u root -p

Reparationer kan leda till dataförlust vid allvarlig korruption, så se till att säkerhetskopiera datan.

Scenariobaserade och problemlösande MySQL-intervjufrågor

Dessa frågor bedömer din erfarenhet av komplexa scenarier i verkligheten och din problemlösningsförmåga.

32. Förklara ett scenario där du använde subqueries i MySQL.

Så här kan du svara på en sådan fråga:

Jag hanterade en e-handelsdatabas på mitt senaste jobb, där jag skulle ta fram en produktrapport. Målet var att hitta produkter som genererade försäljning över genomsnittet, vilket krävde subqueries för att utföra denna fler-stegsanalysering.

Här är SQL-frågan jag tog fram för att lösa detta:

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;

Först fastställde jag vår baslinje genom att beräkna genomsnittlig försäljningssumma över alla produkter. För att göra det använde jag en subquery i WHERE-klausulen som beräknade AVG(sales_amount) från försäljningstabellen. Denna subquery fungerade som en dynamisk tröskel som varje produkts prestation kunde jämföras mot.

Huvudfrågan joinade sedan tabellerna products och sales för att hämta relevanta produktdetaljer, medan WHERE-klausulen filtrerade bort produkter med försäljning under vårt beräknade genomsnitt. 

Genom att strukturera frågan på detta sätt kunde jag identifiera högpresterande produkter i en enda databasoperation istället för att köra flera separata frågor.

33. Kan du förklara en situation där du använde SQL-joins för att kombinera data från flera tabeller? 

Här är ett exempel-svar på frågan ovan:

Nyligen arbetade jag i ett projekt där vi hade två huvudtabeller — en med försäljningsdata för produkter och en annan med produktdetaljer. Min uppgift var att skapa en rapport som visade sales, product name, category och price.

För att kombinera relevant data använde jag en INNER JOIN på den gemensamma kolumnen product_id för att länka försäljningstransaktioner med produktdetaljer:

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;

Rapporten gav en tydlig bild av försäljningstrender och hjälpte intressenter att identifiera vilka produktkategorier som gick bra och vilka som behövde uppmärksamhet.

34. Har du erfarenhet av triggers? Förklara hur du har använt dem.

Här är ett exempel-svar på frågan ovan:

Ja, jag har omfattande erfarenhet av databastriggers. I min senaste roll implementerade jag en AFTER UPDATE-trigger för att granska prisändringar. 

Låt mig gå igenom den specifika implementationen: Jag skapade en trigger som automatiskt registrerar pris-historik när en produktpris ändras. Här är SQL-skriptet jag tog fram:

CREATE TRIGGER tr_AuditPriceChanges
AFTER UPDATE ON Products
FOR EACH ROW
BEGIN
    -- Only log if the price actually changed
    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;

Det som gjorde denna lösning särskilt effektiv var:

  1. Den triggas bara när prisändringar faktiskt sker.
  2. Den fångar upp användaren som gör ändringen med SYSTEM_USER.
  3. Den beräknar procentuell förändring för rapportering.
  4. Den inkluderar en WHERE-klausul för att filtrera bort icke-förändringar som kan uppstå vid uppdatering av andra kolumner.

Jag lade också till felhantering och loggning när vi upptäckte vissa specialfall med NULL-priser.

Tips för att förbereda sig inför en MySQL-intervju

Om du precis har startat din karriär, här är några tips som hjälper dig att lyckas på din kommande intervju:

Bemästra MySQL:s kärnkoncept: Learn the database fundamentals like indexing, transaktioner och frågeoptimering. Förstå hur MySQL bearbetar frågor och hanterar datalagring. Detta hjälper dig att skriva effektiva frågor och förklara dina lösningar under intervjun.

Skaffa praktisk erfarenhet: Installera MySQL på din dator och practicera regelbundet. Skapa testdatabaser, skriv olika typer av frågor och försök optimera dem. Riktig träning är det bästa sättet att förstå hur allt fungerar och bygga självförtroende inför intervjun.

För att ytterligare fräscha upp dina kunskaper, kolla in DataCamps resurser: 

Lär dig om MySQL-verktyg och integrationer: Bekanta dig med MySQL Workbench eller andra verktyg för databashantering och grundläggande övervakning. You kan också utforska hur MySQL fungerar med Python och relevanta ramverk, vilket visar att du kan arbeta i en verklig utvecklingsmiljö.

Slutsats

Där har du det! Jag har gått igenom de 34 viktigaste MySQL-intervjufrågorna för att hjälpa dig landa ditt nästa jobb. Oavsett om du söker en junior roll eller en avancerad roll som dataadministratör behöver du ha en solid förståelse för MySQL-grunder, frågeoptimering och databashantering för att sticka ut. 

För att bredda dina kunskaper om andra databashanteringssystem, kolla in DataCamps SQL-kurser.

Ämnen

Lär dig mer om SQL med dessa kurser!

course

Data Manipulation in SQL

4 timmar
324.1K
Master the complex SQL queries necessary to answer a wide variety of data science questions and prepare robust data sets for analysis in PostgreSQL.
Se detaljerRight Arrow
Starta kursen
Se merRight Arrow