Sariți la conținutul principal

Top 34 întrebări și răspunsuri pentru interviuri MySQL în 2026

Stăpânește MySQL cu acest ghid de întrebări pentru interviu, cu exemple din lumea reală și sfaturi de la experți, ca să excelezi la următorul interviu pentru baze de date!
Actualizat 2 iun. 2026  · 15 min. citire

Ai observat vreodată că MySQL este cerut în aproape orice fișă de post legată de baze de date? Există un motiv bun pentru asta — MySQL alimentează practic totul, de la platformele tale preferate de social media până la aplicațiile pe care le folosești zilnic.

Am creat acest ghid ca să te ajut să abordezi întrebările din interviurile MySQL. Acopăr totul, de la elementele de bază pe care ar trebui să le cunoască dezvoltatorii juniori până la aspectele complexe cerute pentru rolurile de senior. De asemenea, împărtășesc câteva sfaturi care te vor ajuta să te prezinți ca un candidat încrezător în următoarele tale interviuri legate de date. 

Ce este MySQL?

MySQL este un SGBD relațional open-source (relational database management system) construit pe SQL, care organizează datele în tabele structurate. A fost dezvoltat de Oracle Corporation.

A fost clasat drept cel mai popular SGBD în 2024. Totuși, un sondaj Stack Overflow Developer din 2025 a arătat că PostgreSQL s-a clasat drept cea mai utilizată bază de date în rândul dezvoltatorilor profesioniști, depășind pentru prima dată MySQL.

Nu mă înțelege greșit: MySQL este în continuare extrem de popular — ajungând la 40,5% utilizare în rândul dezvoltatorilor în 2025 — și alimentează încă nenumărate aplicații web, sisteme de gestionare a conținutului și instrumente pentru companii. Iar mai ales dacă lucrezi cu aplicații web sau cu stack-ul LAMP, MySQL este o abilitate de top.

Grafic care arată cele mai populare sisteme de baze de date în 2024, MySQL fiind cel mai popular, urmat de PostgreSQL.

În 2024, MySQL a fost cel mai popular SGBD open-source din lume, cu un scor de 1061. Sursa: Statista.

Întrebări de bază pentru interviuri MySQL

În faza inițială a interviului, intervievatorul îți poate pune întrebări fundamentale ca să îți evalueze înțelegerea conceptelor de bază despre baze de date și MySQL. 

1. Ce este o bază de date și în ce fel diferă de un SGBD? 

O bază de date este un container de stocare care conține date la care putem accesa, pe care le putem modifica și analiza. De exemplu, platformele de social media stochează în baze de date informații despre cine a apreciat postările noastre.

Un SGBD (Sistem de Gestiune a Bazelor de Date) este software-ul care ne permite să interacționăm cu acele date și să le gestionăm, prin crearea de utilizatori și administrarea accesului lor. MySQL este una dintre cele mai populare opțiuni de SGBD. Alte exemple includ PostgreSQL, MongoDB și Microsoft SQL Server.

2. Cum diferă MySQL de alte sisteme de gestiune a bazelor de date relaționale?

MySQL este un sistem de gestiune a bazelor de date relaționale (RDBMS) open-source care folosește SQL pentru a gestiona datele. Este cunoscut pentru ușurința în utilizare, viteză și compatibilitate cu aplicațiile web. 

Iată cum diferă MySQL de alte RDBMS-uri:

  • Simplitate și performanță: MySQL este adesea apreciat pentru simplitate și performanță optimizată, ceea ce îl face o alegere preferată pentru dezvoltatorii web și startup-uri.
  • Funcționalități avansate: Deși MySQL excelează la ușurința în utilizare, poate să nu aibă unele funcții avansate prezente în alte RDBMS-uri precum PostgreSQL, cum ar fi suport mai cuprinzător pentru tranzacții ACID, indexare avansată și un set mai larg de tipuri de date.
  • Motoare de stocare: MySQL îți permite să alegi diferite motoare de stocare (de ex., InnoDB, MyISAM) pentru tabele, oferind flexibilitate pentru cazuri specifice.

MySQL este ideal în scenarii care cer viteză și scalabilitate, însă pentru funcționalități mai complexe sau de nivel enterprise, PostgreSQL poate fi o alegere mai potrivită.

3. Care sunt principalele tipuri de date disponibile în MySQL?

MySQL suportă o varietate de tipuri de date, grupate astfel:

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

  • Șiruri de caractere: CHAR, VARCHAR, TEXT, BLOB.

  • Dată/timp: DATE, DATETIME, TIMESTAMP, TIME.

  • JSON: Pentru stocarea obiectelor JSON.

4. Care este diferența dintre tipurile de date INT și DECIMAL? 

INT stochează numere întregi fără zecimale. Îl putem folosi dacă nu avem nevoie de fracții. În schimb, DECIMAL poate stoca valori financiare și este potrivit pentru calcule precise cu zecimale. 

5. În ce fel diferă DATE de DATETIME în MySQL? 

Funcția DATE în MySQL stochează data în format an, lună, zi: 

YYYY-MM-DD

În schimb, funcția DATETIME stochează data împreună cu ora, astfel: 

YYYY-MM-DD HH:MM:SS 

6. Ce este o cheie externă și cum ai folosi-o în baze de date? 

O cheie externă este un câmp dintr-un tabel care face legătura cu cheia primară a altui tabel. 

De exemplu, într-un tabel customers care stochează informații despre clienți, fiecare client are un customer_id unic — într-un alt tabel numit transactions (care stochează înregistrări de achiziții), folosim customer_id ca cheie externă. customer_id din tabelul transactions va lega fiecare achiziție de un anumit client din tabelul customers .

Iată cum arată în 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. Care sunt diferențele dintre INNER JOIN, LEFT JOIN, RIGHT JOIN și FULL JOIN?

Join-urile combină rânduri din două sau mai multe tabele pe baza unor coloane înrudite. Iată diferențele:

  • INNER JOIN: Returnează rândurile unde există o potrivire în ambele tabele.

  • LEFT JOIN: Returnează toate rândurile din tabelul din stânga și rândurile potrivite din tabelul din dreapta. Dacă nu există potrivire, se returnează NULL pentru coloanele tabelului din dreapta.

  • RIGHT JOIN: Similar cu LEFT JOIN, returnează toate rândurile din tabelul din dreapta și rândurile potrivite din stânga.

  • FULL JOIN: Combină rezultatele LEFT JOIN și RIGHT JOIN, incluzând rândurile fără potriviri din ambele tabele. Notă: MySQL nu suportă nativ sintaxa FULL JOIN. Pentru a obține același rezultat, folosește un UNION între un LEFT JOIN și un RIGHT JOIN

8. Care este diferența dintre DELETE, TRUNCATE și DROP în MySQL?

Comenzile DELETE, TRUNCATE și DROP pot suna similar, dar au comportamente diferite:

DELETE: Elimină rânduri dintr-un tabel pe baza unei condiții. Poate fi anulată dacă este într-o tranzacție. Exemplu:

DELETE FROM employees WHERE department_id = 5;

TRUNCATE: Șterge toate rândurile dintr-un tabel, dar păstrează structura tabelului. Este mai rapid decât DELETE și nu poate fi anulat. Exemplu:

TRUNCATE TABLE employees;

DROP: Elimină complet structura și datele tabelului, împreună cu orice dependențe, cum ar fi indexurile. Exemplu:

DROP TABLE employees;

9. Cum creezi și modifici un tabel în MySQL? Oferă exemple.

Pentru a crea tabele, poți folosi instrucțiunea CREATE TABLE, iar pentru modificări, de obicei ALTER TABLE. Iată câteva exemple:

Creare tabel:

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

Modificare pentru a adăuga o coloană:

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

10. Ce este un tabel temporar în SQL? 

Un tabel temporar există doar în timpul sesiunii curente de bază de date. După închiderea sesiunii, tabelul este șters. Acest tip de tabel poate stoca temporar rezultate intermediare. Îl putem folosi pentru testare, filtrare sau pregătirea datelor înainte de inserarea lor într-un tabel permanent.

Iată un exemplu:

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

11. Ce este o subinterogare în MySQL? Explică cu un exemplu. 

O subinterogare (cunoscută și ca interogare imbricată) este plasată în interiorul altei interogări. Ea descompune operațiunile complexe asupra bazei de date în pași mai ușor de gestionat. De exemplu, poți crea o subinterogare pentru a găsi angajații care câștigă peste media salarială: 

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

Hai să descompunem:

  1. Interogarea internă SELECT AVG(salary) FROM employees calculează mai întâi salariul mediu.

  2. Interogarea externă folosește apoi această medie pentru a găsi angajații care câștigă peste ea. 

12. Cum ai folosi o instrucțiune INSERT în MySQL pentru a adăuga date într-un tabel? Ai și câteva bune practici? 

Putem folosi instrucțiunea INSERT pentru a adăuga date într-un tabel. Sintaxa de bază este:

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

Iată câteva bune practici de urmat când folosești instrucțiunea INSERT

  1. Listează explicit coloanele. Asta face codul mai clar și previne erorile dacă structura tabelului se schimbă ulterior.

  2. Pentru coloanele AUTO_INCREMENT, precum ID-urile, omite-le în instrucțiunea INSERT. MySQL le gestionează automat ca să prevină ID-uri duplicate. 

  3. Fii consecvent cu ghilimelele pentru șiruri. Personal prefer ghilimelele simple, dar ambele opțiuni funcționează.

  4. Dacă inserezi mai multe rânduri, o poți face într-o singură instrucțiune pentru performanță mai bună.

13. Care este semnificația atributului AUTO_INCREMENT în MySQL?

Atributul AUTO_INCREMENT în MySQL generează numere unice, secvențiale, pentru o coloană, de obicei cheia primară a unui tabel.

Iată un exemplu de creare a unui tabel cu o coloană AUTO_INCREMENT:

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

Și pentru a insera rânduri în el:

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

14. Ce este o vizualizare (view) în MySQL? 

O vizualizare este o interogare salvată care funcționează ca un tabel virtual. Cu ea, putem lua o interogare complexă, să-i dăm un nume și s-o folosim ca pe un tabel pentru interogări viitoare. Astfel, nu trebuie să tastezi întreaga interogare de fiecare dată.

De exemplu, pentru a simplifica interogarea detaliilor angajaților împreună cu denumirile departamentelor, poți crea o vizualizare:

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;

Acum poți interoga vizualizarea employee_details ca pe un tabel:

SELECT * FROM employee_details;

Totuși, nu putem folosi vizualizările pentru a insera și actualiza date. Majoritatea sunt doar pentru citire și împiedică utilizatorii să acceseze direct baza de date, sporind securitatea datelor. Vizualizările pot uneori încetini interogările, deoarece rulează interogarea de bază de fiecare dată când sunt accesate.

Întrebări intermediare pentru interviuri MySQL

În această secțiune, vom acoperi subiecte de nivel intermediar. Aceste întrebări sunt puse în principal pentru a-ți testa cunoștințele despre tipurile de date și structura MySQL.

15. Ce sunt tabelele versionate de sistem și cum funcționează? 

Tabelele versionate de sistem mențin un istoric complet al modificărilor făcute într-un tabel. Deoarece păstrează versiunile anterioare ale fiecărui rând, le putem folosi pentru audit și recuperarea datelor. 

Funcționează prin adăugarea a două coloane suplimentare — StartTime și EndTime — pentru a înregistra intervalul de valabilitate al fiecărui rând. Când inserăm, actualizăm sau ștergem date, aceste marcaje temporale se actualizează:

  • Insert: Se adaugă un rând nou cu StartTime setat la timestampul curent și EndTime la 9999-12-31 23:59:59 — valoarea maximă DATETIME din MySQL, folosită ca santinelă pentru a reprezenta „acest rând este activ în prezent”.

  • Update: EndTime al rândului inițial se actualizează la timestampul curent pentru a-l marca drept nevalid. Apoi se creează un rând nou cu datele actualizate, cu StartTime setat la timestampul curent și EndTime ca „pentru totdeauna”.

  • Delete: EndTime al rândului existent este actualizat la timestampul curent, indicând că rândul nu mai este valid.

Folosind clauza FOR SYSTEM_TIME din SQL, poți interoga tabelul pentru a-i vedea starea la un moment specific sau pe un interval de timp. De exemplu:

  • FOR SYSTEM_TIME AS OF '2024-01-01': Preia starea tabelului așa cum era la 1 ianuarie 2024.

  • FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31': Arată toate rândurile valabile în acest interval de date.

16. Ce sunt tranzacțiile MySQL și cum le folosești?

Tranzacțiile sunt un set de operații executate ca o singură unitate. Ele asigură integritatea datelor permițând ca toate operațiile să reușească sau să eșueze împreună.

Iată un exemplu de utilizare:

START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE account_id = 2;
COMMIT; -- Salvează permanent modificările
-- sau
ROLLBACK; -- Revine asupra modificărilor

17. Ce este o constrângere implicită (default) în MySQL? Cum setezi o valoare implicită pentru o coloană?

O constrângere implicită în MySQL atribuie o valoare implicită unei coloane atunci când nu este furnizată o valoare explicită în timpul unei operații INSERT. Astfel, coloana rămâne validă chiar dacă utilizatorul o omite la introducerea datelor.

Iată cum creezi un tabel cu o valoare implicită:

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

Apoi poți insera un rând fără să specifici status:

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

Această abordare reduce probabilitatea de NULL sau date invalide în coloane critice și simplifică interogările, eliminând nevoia de a trata explicit cazurile implicite.

Câmp

Tip

Null

Cheie

Implicit

Extra

id

INT

NU

PRI

NULL

AUTO_INCREMENT

name

VARCHAR(50)

DA

 

NULL

 

status

VARCHAR(10)

DA

 

active

 

Această comandă este utilă deoarece:

  • Îi ajută pe dezvoltatori să înțeleagă schema tabelului înainte de a scrie interogări.
  • Poate fi folosită la depanare, mai ales când lucrezi cu baze de date necunoscute.
  • Identifică rapid constrângerile, cum ar fi cheile primare sau valorile implicite.

18. Care este diferența dintre CHAR și VARCHAR în MySQL?

Ambele stochează date de tip șir, dar gestionează stocarea diferit:

  • CHAR(n) stochează întotdeauna exact n caractere, completând cu spații dacă valoarea e mai scurtă. Este de lungime fixă, ceea ce îl face ușor mai rapid pentru coloane în care toate valorile au aceeași lungime, precum codurile de țară sau indicatoarele de stare.

  • VARCHAR(n) stochează doar caracterele introduse efectiv, până la un maxim de n. Folosește mai puțin spațiu pentru date cu lungime variabilă, dar are un mic overhead pentru a urmări lungimea.

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

Ca regulă generală: folosește CHAR pentru valori cu lungime fixă, VARCHAR pentru toate celelalte.

19. Cum ai folosi funcțiile pentru șiruri în SQL pentru a gestiona textul? 

Diverse funcții pentru șiruri în SQL lucrează cu nume și alte date text. De exemplu:

  • Funcția LENGTH() afișează numărul de caractere dintr-un nume. 

  • UPPER() și LOWER() convertesc textul în majuscule sau minuscule. 

  • CONCAT() unește prenumele și numele într-o coloană. 

  • SUBSTRING() extrage părți specifice din text. De exemplu, îl putem folosi pentru a separa luna din data nașterii. 

Iată un exemplu de interogare:

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;

Această interogare:

  • Transformă numele în majuscule.

  • Combină prenumele și numele într-un nume complet.

  • Extrage luna nașterii din coloana birthdate.

  • Elimină spațiile din numele de familie.

  • Înlocuiește toate aparițiile lui „a” cu „@” în prenume.

20. Cum ai actualiza un rând specific într-o bază de date cu SQL?

Poți folosi instrucțiunea UPDATE și clauza WHERE pentru a identifica înregistrarea pe care vrei s-o modifici. 

De exemplu, dacă vrei să actualizezi genul filmului „Inception” din 2010 la „Sci-fi”, poți folosi următoarea interogare: 

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

Aici, UPDATE movies specifică tabelul pe care vrem să-l actualizăm, iar clauza WHERE vizează rândul unde titlul este „Inception” și anul este „2010”. 

Întrebări avansate pentru interviuri MySQL

Întrebările avansate îți testează capacitatea de a gestiona scenarii complexe în MySQL și îi oferă intervievatorului o idee despre modul tău de a lua decizii. 

21. Ce este un trigger în MySQL? Cum îl implementezi? 

În MySQL, un trigger este un set de acțiuni care rulează atunci când are loc un eveniment în baza de date. Trigger-ele pot fi configurate să se execute înainte sau după evenimente precum INSERT, UPDATE sau DELETE

De exemplu, să presupunem că există un tabel orders în care se adaugă comenzi noi. Putem crea un trigger care înregistrează fiecare comandă nouă într-un tabel 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;

După ce trigger-ul rulează, tabelul order_history este actualizat automat:

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. De ce adăugarea unui index face interogările SQL mai rapide? 

Dacă nu există un index, baza de date va trebui să scaneze fiecare rând pentru a găsi o intrare specifică. Un index acționează ca un cuprins, permițând bazei de date să acceseze rândurile relevante. Așadar, adăugarea unui index scurtează timpul de căutare și face ca interogările să ruleze mai rapid. 

Indexurile sunt de obicei implementate folosind structuri de date precum arbori B sau tabele hash, care permit bazei de date să efectueze căutări, lookup-uri și scanări pe intervale eficient.

Iată un exemplu de creare a unui index:

-- Fără index:
SELECT * FROM employees WHERE last_name = 'Smith';
-- Adăugarea unui index pe coloana last_name:
CREATE INDEX idx_last_name ON employees(last_name);
-- Cu index, baza de date poate localiza rapid rândurile cu 'Smith' în coloana last_name.

Indexurile au și dezavantaje, de exemplu:

  • Operații de scriere mai lente: INSERT, UPDATE și DELETE sunt mai lente deoarece indexul trebuie actualizat de fiecare dată când se schimbă datele.

  • Cost de stocare: Indexurile necesită spațiu de stocare suplimentar.

23. Ce tip de date folosim pentru greutatea și prețul produsului într-un tabel SQL și de ce? 

Pentru greutate, DECIMAL este, în general, alegerea mai sigură. Deși FLOAT și REAL pot stoca valori zecimale, ele folosesc aritmetică în virgulă mobilă, care poate introduce mici erori de rotunjire.

Pentru greutăți de produs unde acuratețea contează (de ex., calcule de expediere, inventar), DECIMAL(8, 3) îți oferă control precis cu 3 zecimale și fără surprize de rotunjire. FLOAT este acceptabil doar când o mică marjă de eroare este în regulă.

24. Cum găsești rânduri duplicate în SQL cu o funcție fereastră? 

Iată cum poți găsi duplicate folosind funcția fereastră 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;

Hai să vedem cum funcționează:

1. ROW_NUMBER() atribuie un număr fiecărui rând din rezultat. 

2. PARTITION BY grupează rândurile după product_name și category

3. În cadrul fiecărui grup, rândurile sunt numerotate începând de la 1. 

4. Orice row_num mai mare decât 1 indică un duplicat. 

De exemplu, dacă avem aceste înregistrări:

  • Product A, Category X, row_num = 1
  • Product A, Category X, row_num = 2 (duplicat)
  • Product B, Category Y, row_num = 1

Interogarea ne va afișa al doilea rând, deoarece row_num este mai mare decât 1.

25. Cum creezi și folosești o procedură stocată cu parametri în MySQL? Explică printr-un exemplu. 

Putem salva și reutiliza interogări complexe cu proceduri stocate pentru a face operațiunile asupra bazei de date mai eficiente și mai ușor de întreținut. Să vedem cum le creăm și folosim cu parametri, printr-un exemplu practic.

Să presupunem că avem o bază de date cu studenți și vrem să creăm o procedură pentru a filtra studenții după vârstă. Iată cum o putem face:

Mai întâi, să creăm o procedură stocată simplă care primește un parametru de vârstă:

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

Pentru a folosi această procedură, pur și simplu o CALL-ăm cu vârsta dorită:

CALL get_student_info(21);

Putem face procedurile mai sofisticate folosind parametri de ieșire. De exemplu, să creăm o procedură care numără studenții de o anumită vârstă:

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;

Pentru a obține rezultatul din această procedură:

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

26. De ce este importantă integritatea referențială într-o bază de date? 

Integritatea referențială păstrează corecte relațiile dintre tabele. Când creăm o cheie externă, ea asigură că valorile dintr-un tabel se potrivesc cu valoarea unică din tabelul referit.

Un exemplu practic: Să presupunem că administrezi o bază de date pentru e-commerce. Ai un tabel Customers și un tabel Orders. Fiecare comandă trebuie să aparțină unui client real. Integritatea referențială, implementată prin chei externe, aplică această relație asigurând că:

  • Nu poți crea o comandă pentru un client inexistent.
  • Nu poți șterge un client care are comenzi existente (decât dacă configurezi explicit ce se întâmplă cu acele comenzi).
  • Nu poți actualiza ID-ul unui client dacă acel client are comenzi existente.

Astfel, când creezi o constrângere de cheie externă ca aceasta:

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

Baza de date aplică automat aceste reguli:

  • Fiecare CustomerID din tabelul Orders trebuie să existe în tabelul Customers.

  • Încercările de a încălca aceste reguli (de exemplu, inserarea unui CustomerID invalid) vor fi respinse.

Acest lucru previne inconsistențele de date care ar putea cauza probleme serioase, cum ar fi comenzi care nu pot fi atribuite unor clienți reali sau rapoarte generate cu informații lipsă despre clienți. 

Întrebări MySQL pentru administratori de baze de date

Dacă aplici în mod specific pentru un rol de administrator de baze de date, iată câteva întrebări pe care ți le pot pune recrutorii.

27. De ce ar folosi o aplicație mare shard-ing de bază de date? Spune-mi și despre provocările sale. 

O aplicație mare folosește shard-ingul pentru a împărți volumele mari de date pe mai multe servere. Fiecare parte sau shard conține o mică parte din date. Deoarece distribuie încărcarea de date, nu mai e nevoie de hardware de top. Deși viteza și scalabilitatea se îmbunătățesc, există și unele provocări: 

  • Unele interogări, precum join-urile, pot să nu funcționeze, ceea ce poate complica gestionarea datelor. 
  • Când datele cresc, shard-urile pot deveni supraîncărcate, creând puncte fierbinți care încetinesc performanța. 

28. Explică rolul redo log-urilor în recuperarea după crash în MySQL. 

De fiecare dată când datele sunt modificate în MySQL, trebuie scrise pe disc. Totuși, scrierea direct în fișierele de date este lentă și riscantă. De aceea, înainte ca MySQL să modifice orice fișier de date, mai întâi notează ce va face în redo log. Acest lucru este mai sigur decât actualizarea aleatorie a fișierelor de date.

Să zicem, așadar, că actualizezi adresa unui client:

  1. MySQL scrie mai întâi această modificare în redo log.
  2. Apoi confirmă tranzacția ca efectuată (committed).
  3. În cele din urmă, aplică modificarea în fișierele reale de date.

Recuperarea după crash este importantă dacă MySQL se prăbușește după pasul 1 sau 2, dar înainte de pasul 3. Când MySQL repornește, se uită în redo log-uri și finalizează orice lucru neterminat redând modificările înregistrate în acestea. Astfel se garantează că tranzacțiile confirmate nu se pierd, chiar dacă MySQL se prăbușește într-un moment nepotrivit.

29. Care sunt diferitele motoare de stocare disponibile în MySQL și cum diferă?

MySQL suportă multiple motoare de stocare, fiecare optimizat pentru cazuri de utilizare diferite. Iată o comparație a celor mai comune:

Motor de stocare Caracteristici cheie Cel mai potrivit pentru
InnoDB Motor implicit. Conform ACID, blocare la nivel de rând, tranzacții și chei externe. E-commerce, sisteme financiare, orice necesită integritatea datelor.
MyISAM Citiri rapide, blocare la nivel de tabel. Fără tranzacții sau chei externe. Aplicații cu multe citiri, unde viteza contează mai mult decât integritatea.
Memory Date stocate în RAM. Extrem de rapid, dar pierdut la repornire. Caching, gestionarea sesiunilor, date temporare.
CSV Stochează datele ca fișiere CSV simple. Fără indexare. Schimb de date între aplicații sau stocare simplă tip fișier plat.
Archive Compresie ridicată. Doar INSERT și SELECT. Fără indexuri. Date de jurnal sau înregistrări istorice rar interogate.
NDB (Clustered) Stocare distribuită, disponibilitate ridicată, toleranță la erori, suportă tranzacții. Aplicații distribuite la scară mare ce necesită performanță în timp real.

30. Cum ai seta un motor de stocare implicit în MySQL? 

Mai întâi, poți verifica motorul de stocare implicit curent:

SHOW ENGINES;

InnoDB este recomandat ca motor implicit, deoarece suportă funcții importante precum:

  • Tranzacții conforme ACID
  • Constrângeri de chei externe
  • Recuperare după crash
  • Blocare la nivel de rând

Pentru a schimba temporar motorul implicit pentru sesiunea curentă, poți folosi:

SET default_storage_engine = 'InnoDB';

Pentru o modificare permanentă, poți edita fișierul de configurare MySQL adăugând această linie sub secțiunea [mysqld]:

default-storage-engine = InnoDB

31. Cum ai repara tabele corupte în MySQL? 

Mai întâi, poți verifica toate bazele de date cu această comandă: 

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

Va scana toate tabelele și va raporta dacă există corupere. Apoi, poți rula următoarea comandă pentru a repara tabelul: 

mysqlcheck --repair database_name table_name -u root -p

Reparațiile pot duce la pierdere de date în cazuri de corupere severă, așa că asigură-te că faci backup datelor.

Întrebări MySQL bazate pe scenarii și rezolvare de probleme

Aceste întrebări îți evaluează experiența cu scenarii complexe din lumea reală și abilitățile de rezolvare a problemelor.

32. Explică un scenariu în care ai folosit subinterogări în MySQL.

Iată cum poți răspunde la o astfel de întrebare:

Am gestionat baza de date a unui magazin online la jobul meu recent, unde a trebuit să pregătesc un raport de produse. Scopul a fost să găsim produsele care au generat vânzări peste medie, ceea ce a necesitat folosirea subinterogărilor pentru a face această analiză în mai mulți pași.

Iată interogarea SQL pe care am dezvoltat-o pentru a rezolva asta:

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;

Mai întâi, am stabilit reperul nostru calculând valoarea medie a vânzărilor pentru toate produsele. Pentru asta, am folosit o subinterogare în clauza WHERE care calcula AVG(sales_amount) din tabelul de vânzări. Această subinterogare a acționat ca un prag dinamic față de care putea fi măsurată performanța fiecărui produs.

Interogarea principală a unit apoi tabelele de produse și vânzări pentru a extrage detaliile relevante ale produselor, în timp ce clauza WHERE a filtrat produsele cu vânzări sub media calculată. 

Structurând interogarea în acest mod, am putut identifica produsele cu performanță ridicată într-o singură operațiune asupra bazei de date, în loc să rulez mai multe interogări separate.

33. Poți explica o situație în care ai folosit join-uri SQL pentru a combina date din mai multe tabele? 

Iată un răspuns exemplu la întrebarea de mai sus:

Recent, am lucrat la un proiect în care aveam două tabele principale — unul cu date despre vânzări de produse și altul cu detalii despre produse. Sarcina mea a fost să creez un raport care să arate vânzările, numele produsului, categoria și prețul.

Pentru a combina datele relevante, am folosit un INNER JOIN pe coloana comună product_id, pentru a lega tranzacțiile de vânzări cu detaliile produselor:

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;

Raportul a oferit o imagine clară a tendințelor de vânzări, ajutând părțile interesate să identifice ce categorii de produse se descurcau bine și care necesitau atenție.

34. Ai experiență cu trigger-e? Explică cum le-ai folosit.

Iată un răspuns exemplu la întrebarea de mai sus:

Da, am o experiență vastă cu trigger-ele de bază de date. În rolul meu recent, am implementat un trigger AFTER UPDATE pentru auditarea modificărilor de preț. 

Îți descriu implementarea specifică: am creat un trigger care capturează automat istoricul prețurilor ori de câte ori se schimbă prețul unui produs. Iată scriptul SQL pe care l-am dezvoltat:

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;

Ce a făcut această soluție deosebit de eficientă a fost:

  1. Se declanșează doar când apar modificări reale de preț.
  2. Capturează utilizatorul care face modificarea folosind SYSTEM_USER.
  3. Calculează procentul de modificare pentru raportare.
  4. Include o clauză WHERE pentru a elimina „nemodificările” care pot apărea din actualizări ale altor coloane.

Am adăugat, de asemenea, tratarea erorilor și logare atunci când am observat unele cazuri limită cu prețuri NULL.

Sfaturi pentru pregătirea unui interviu MySQL

Dacă ești la început de carieră, iată câteva sfaturi care te vor ajuta să faci față cu brio interviului care urmează:

Stăpânește conceptele de bază MySQL: Învață fundamentele bazelor de date, precum indexarea, tranzacțiile și optimizerul de interogări. Înțelege cum procesează MySQL interogările și gestionează stocarea datelor. Asta te va ajuta să scrii interogări eficiente și să îți explici soluțiile în interviu.

Câștigă experiență practică: Instalează MySQL pe computerul tău și practică regulat. Creează baze de date de test, scrie diferite tipuri de interogări și încearcă să le optimizezi. Practica reală este cea mai bună modalitate de a învăța cum funcționează lucrurile și de a-ți construi încrederea pentru interviu.

Pentru a-ți împrospăta cunoștințele, aruncă o privire peste resursele DataCamp: 

Învață despre instrumentele și integrările MySQL: Familiarizează-te cu MySQL Workbench sau alte instrumente pentru administrarea bazelor de date și monitorizare de bază. Poți explora, de asemenea, cum funcționează MySQL cu Python și framework-uri relevante, arătând că poți lucra într-un mediu real de dezvoltare.

Concluzie

Gata! Am acoperit top 34 de întrebări pentru interviuri MySQL ca să te ajut să obții următorul job. Fie că aplici pentru un rol entry-level sau pentru o poziție avansată de administrator de date, trebuie să ai o bază solidă în elementele fundamentale MySQL, optimizarea interogărilor și administrarea bazelor de date ca să te evidențiezi. 

Pentru a-ți extinde cunoștințele despre alte sisteme de gestiune a bazelor de date, consultă cursurile SQL de la DataCamp.

Subiecte

Află mai multe despre SQL cu aceste cursuri!

course

Manipularea datelor în SQL

4 oră
324.1K
Vezi detaliiRight Arrow
Începeți cursul
Vezi mai multRight Arrow