Lewati ke konten utama

34 Pertanyaan dan Jawaban Wawancara MySQL Teratas untuk 2026

Kuasai MySQL dengan panduan pertanyaan wawancara ini, lengkap dengan contoh dunia nyata dan tips ahli untuk membantu Anda unggul dalam wawancara basis data berikutnya!
Diperbarui 16 Apr 2026  · 15 mnt baca

Pernahkah Anda memperhatikan bahwa MySQL hampir selalu tercantum dalam deskripsi pekerjaan yang berkaitan dengan basis data? Ada alasan bagus untuk itu — MySQL pada dasarnya menjalankan segalanya, dari platform media sosial favorit Anda hingga aplikasi yang Anda gunakan setiap hari.

Saya menyusun panduan ini untuk membantu Anda menghadapi pertanyaan wawancara MySQL. Saya akan membahas semua hal penting, dari dasar-dasar yang perlu diketahui pengembang junior hingga materi kompleks untuk peran senior. Saya juga akan berbagi beberapa tips agar Anda terlihat sebagai kandidat yang percaya diri dalam wawancara terkait data berikutnya. 

Apa itu MySQL?

MySQL adalah RDBMS (relational database management system) sumber terbuka yang dibangun di atas SQL dan mengorganisasi data ke dalam tabel terstruktur. Sistem ini dikembangkan oleh Oracle Corporation.

MySQL menduduki peringkat sebagai DBMS paling populer pada 2024 karena semakin banyak bisnis yang memigrasikan data mereka ke MySQL. Itulah mengapa jika Anda berencana mendapatkan pekerjaan di bidang basis data, sangat penting untuk memahami MySQL dan basis data relasional. 

Grafik yang menampilkan sistem basis data paling populer pada 2024, dengan MySQL sebagai yang paling populer, diikuti oleh PostgreSQL.

Per Juni 2024, MySQL adalah sistem manajemen basis data (DBMS) sumber terbuka paling populer di dunia, dengan skor peringkat 1061. Sumber: Statista.

Pertanyaan Wawancara MySQL Dasar

Pada tahap awal wawancara, pewawancara dapat menanyakan pertanyaan dasar untuk menilai pemahaman Anda tentang konsep-konsep dasar basis data dan MySQL. 

1. Apa itu basis data, dan bagaimana perbedaannya dengan DBMS? 

Basis data adalah wadah penyimpanan yang menampung data yang dapat kita akses, ubah, dan analisis. Misalnya, platform media sosial menyimpan data tentang siapa yang menyukai postingan kita di dalam basis data.

DBMS (Database Management System) adalah perangkat lunak yang memungkinkan kita berinteraksi dan mengelola data tersebut, seperti membuat pengguna dan mengelola aksesnya. MySQL adalah salah satu opsi DBMS paling populer. Contoh lain mencakup PostgreSQL, MongoDB, dan Microsoft SQL Server.

2. Bagaimana MySQL berbeda dari sistem manajemen basis data relasional lainnya?

MySQL adalah sistem manajemen basis data relasional (RDBMS) sumber terbuka yang menggunakan SQL untuk mengelola data. MySQL dikenal karena kemudahan penggunaan, kecepatan, dan kompatibilitasnya dengan aplikasi berbasis web. 

Berikut perbedaan MySQL dengan RDBMS lainnya:

  • Kesederhanaan dan kinerja: MySQL sering dipuji karena kesederhanaan dan kinerja yang dioptimalkan, menjadikannya pilihan utama bagi pengembang web dan startup.
  • Fitur lanjutan: Walaupun MySQL unggul dalam kemudahan penggunaan, MySQL mungkin tidak selengkap RDBMS lain seperti PostgreSQL dalam hal dukungan transaksi ACID yang lebih komprehensif, pengindeksan tingkat lanjut, dan ragam tipe data yang lebih luas.
  • Mesin penyimpanan: MySQL memungkinkan Anda memilih mesin penyimpanan berbeda (mis. InnoDB, MyISAM) untuk tabel, memberi fleksibilitas untuk kasus penggunaan spesifik.

MySQL ideal untuk skenario yang membutuhkan kecepatan dan skalabilitas, namun untuk fitur yang lebih kompleks atau tingkat enterprise, PostgreSQL mungkin pilihan yang lebih baik.

3. Apa saja tipe data utama yang tersedia di MySQL?

MySQL mendukung beragam tipe data yang dikategorikan sebagai:

  • Numerik: INT, DECIMAL, FLOAT, DOUBLE, dll.
  • String: CHAR, VARCHAR, TEXT, BLOB.
  • Tanggal/waktu: DATE, DATETIME, TIMESTAMP, TIME.
  • JSON: Untuk menyimpan objek JSON.

4. Apa perbedaan antara tipe data INT dan DECIMAL? 

INT menyimpan bilangan bulat tanpa desimal. Gunakan ini jika tidak diperlukan pecahan. Sebaliknya, DECIMAL dapat menyimpan nilai finansial dan cocok untuk perhitungan desimal yang presisi. 

5. Bagaimana perbedaan DATE dan DATETIME di MySQL? 

Fungsi DATE di MySQL menyimpan tanggal dalam format tahun, bulan, dan hari: 

YYYY-MM-DD

Sementara itu, DATETIME menyimpan tanggal beserta waktu, tampilannya seperti ini: 

YYYY-MM-DD HH:MM:SS 

6. Apa itu foreign key, dan bagaimana Anda menggunakannya dalam basis data? 

Foreign key adalah kolom pada satu tabel yang menaut ke primary key pada tabel lain. 

Contohnya, pada tabel customers yang menyimpan informasi pelanggan, setiap pelanggan memiliki customer_id unik — pada tabel lain bernama transactions (yang menyimpan catatan pembelian), kita menggunakan customer_id sebagai foreign key. Kolom customer_id di tabel transactions akan menautkan setiap pembelian ke pelanggan tertentu di tabel customers .

Berikut tampilannya dalam 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. Apa perbedaan antara INNER JOIN, LEFT JOIN, RIGHT JOIN, dan FULL JOIN?

Join menggabungkan baris dari dua atau lebih tabel berdasarkan kolom terkait. Berikut perbedaannya:

  • INNER JOIN: Mengembalikan baris yang cocok di kedua tabel.
  • LEFT JOIN: Mengembalikan semua baris dari tabel kiri dan baris yang cocok dari tabel kanan. Jika tidak ada kecocokan, kolom tabel kanan bernilai NULL.
  • RIGHT JOIN: Mirip LEFT JOIN, mengembalikan semua baris dari tabel kanan dan baris yang cocok dari tabel kiri.
  • FULL JOIN: Menggabungkan hasil LEFT JOIN dan RIGHT JOIN, termasuk baris yang tidak cocok dari kedua tabel.

8. Apa perbedaan antara DELETE, TRUNCATE, dan DROP di MySQL?

Perintah seperti DELETE, TRUNCATE, dan DROP terdengar mirip, tetapi sebenarnya berperilaku berbeda:

  • DELETE: Menghapus baris dari tabel berdasarkan kondisi. Dapat dibatalkan (rollback) jika berada dalam transaksi. Contoh:
DELETE FROM employees WHERE department_id = 5;
  • TRUNCATE: Menghapus semua baris dari tabel, tetapi struktur tabel tetap utuh. Lebih cepat daripada DELETE dan tidak dapat di-rollback. Contoh:
TRUNCATE TABLE employees;
  • DROP: Menghapus seluruh struktur dan data tabel, beserta dependensi seperti indeks. Contoh:
DROP TABLE employees;

9. Bagaimana cara membuat dan mengubah tabel di MySQL? Berikan contoh.

Untuk membuat tabel, Anda dapat menggunakan pernyataan CREATE TABLE, dan untuk mengubahnya biasanya ALTER TABLE. Berikut beberapa contohnya:

  • Membuat tabel:
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50));
  • Mengubah untuk menambah kolom:
ALTER TABLE employees ADD COLUMN salary DECIMAL(10, 2);

10. Apa itu temporary table dalam SQL? 

Temporary table hanya ada selama sesi basis data saat ini. Setelah sesi ditutup, tabel akan dihapus. Tabel jenis ini dapat menyimpan hasil perantara sementara. Kita dapat menggunakannya untuk pengujian, penyaringan, atau menyiapkan data sebelum memasukkannya ke tabel permanen.

Berikut contohnya:

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

11. Apa itu subquery di MySQL? Jelaskan dengan contoh. 

Subquery (juga dikenal sebagai kueri bertingkat) disarang di dalam kueri lain. Ini memecah operasi basis data yang kompleks menjadi langkah-langkah yang lebih mudah dikelola. Misalnya, Anda dapat membuat subquery untuk mencari karyawan dengan gaji di atas rata-rata: 

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

Mari kita uraikan:

  1. Kueri dalam SELECT AVG(salary) FROM employees terlebih dahulu menghitung gaji rata-rata.
  2. Kueri luar lalu menggunakan rata-rata ini untuk menemukan karyawan yang berpenghasilan di atasnya. 

12. Bagaimana Anda menggunakan pernyataan INSERT di MySQL untuk menambahkan data ke tabel? Adakah praktik terbaiknya? 

Kita dapat menggunakan pernyataan INSERT() untuk menambahkan data ke tabel. Sintaks dasarnya:

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

Berikut beberapa praktik terbaik yang dapat Anda ikuti saat menggunakan INSERT():

  1. Cantumkan kolom secara eksplisit. Ini membuat kode lebih jelas dan mencegah kesalahan jika struktur tabel berubah di kemudian hari.
  2. Untuk kolom AUTO_INCREMENT seperti ID, lewati dalam pernyataan INSERT(). MySQL menanganinya secara otomatis untuk mencegah ID duplikat. 
  3. Konsisten dalam penggunaan tanda kutip string. Saya pribadi lebih suka tanda kutip tunggal, namun keduanya bisa digunakan.
  4. Jika Anda menyisipkan banyak baris, lakukan dalam satu pernyataan untuk kinerja yang lebih baik.

13. Apa pentingnya atribut AUTO_INCREMENT di MySQL?

Atribut AUTO_INCREMENT di MySQL menghasilkan angka unik dan berurutan untuk sebuah kolom, biasanya primary key suatu tabel.

Berikut contoh cara membuat tabel dengan kolom AUTO_INCREMENT:

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

Dan untuk menyisipkan baris ke dalamnya:

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

14. Apa itu view di MySQL? 

View adalah kueri yang disimpan dan berfungsi seperti tabel virtual. Dengan ini, kita dapat mengambil kueri kompleks, memberinya nama, dan menggunakannya seperti tabel untuk kueri selanjutnya. Dengan cara ini, Anda tidak perlu mengetik ulang seluruh kueri setiap kali.

Misalnya, untuk menyederhanakan pengambilan detail karyawan beserta nama departemennya, Anda dapat membuat view:

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;

Sekarang Anda dapat melakukan kueri pada view employee_details seperti tabel:

SELECT * FROM employee_details;

Namun, kita tidak dapat menggunakan view untuk menyisipkan dan memperbarui data. Sebagian besar bersifat hanya-baca dan mencegah pengguna mengakses basis data secara langsung, sehingga meningkatkan keamanan data. View terkadang dapat memperlambat kueri karena mereka menjalankan kueri dasarnya setiap kali diakses.

Pertanyaan Wawancara MySQL Tingkat Menengah

Di bagian ini, kita akan membahas topik tingkat menengah. Pertanyaan-pertanyaan ini terutama diajukan untuk menguji pengetahuan Anda tentang tipe data dan struktur MySQL.

15. Apa itu system-versioned tables, dan bagaimana cara kerjanya? 

System-versioned tables mempertahankan riwayat lengkap perubahan yang terjadi pada sebuah tabel. Karena menyimpan versi sebelumnya dari setiap baris, kita dapat menggunakannya untuk audit dan pemulihan data. 

Tabel ini bekerja dengan menambahkan dua kolom ekstra — StartTime dan EndTime — untuk mencatat kapan setiap baris berlaku. Saat kita menyisipkan, memperbarui, atau menghapus data, stempel waktu ini akan diperbarui:

  • Insert: Baris baru ditambahkan dengan StartTime disetel ke stempel waktu saat ini dan EndTime 9999-12-31 23:59:59 (atau nilai serupa yang mewakili "selamanya"). Ini menunjukkan bahwa baris tersebut saat ini valid.
  • Update: EndTime baris asli diperbarui ke stempel waktu saat ini untuk menandai bahwa baris tersebut tidak lagi valid. Lalu, baris baru dengan data terbaru dibuat, dengan StartTime disetel ke stempel waktu saat ini dan EndTime sebagai "selamanya".
  • Delete: EndTime baris yang ada diperbarui ke stempel waktu saat ini, menandakan baris tersebut tidak lagi valid.

Dengan klausa FOR SYSTEM_TIME di SQL, Anda dapat melakukan kueri pada tabel untuk melihat keadaannya pada waktu tertentu atau dalam rentang waktu. Contohnya:

  • FOR SYSTEM_TIME AS OF '2024-01-01': Mengambil keadaan tabel seperti pada 1 Januari 2024.
  • FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31': Menampilkan semua baris yang valid dalam rentang tanggal ini.

16. Apa itu transaksi MySQL, dan bagaimana cara menggunakannya?

Transaksi adalah sekumpulan operasi yang dijalankan sebagai satu kesatuan. Transaksi memastikan integritas data dengan memungkinkan semua operasi berhasil atau gagal bersama-sama.

Berikut contoh penggunaannya:

START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE account_id = 2;
COMMIT; -- Menyimpan perubahan secara permanen
-- atau
ROLLBACK; -- Mengembalikan perubahan

17. Apa itu default constraint di MySQL? Bagaimana cara menetapkan nilai default untuk sebuah kolom?

Default constraint di MySQL menetapkan nilai baku untuk sebuah kolom saat tidak ada nilai eksplisit yang diberikan selama operasi INSERT. Ini memastikan kolom tetap valid meskipun pengguna tidak mengisinya saat entri data.

Berikut cara membuat tabel dengan nilai default:

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

Kemudian, Anda bisa menyisipkan baris tanpa menentukan status:

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

Pendekatan ini mengurangi kemungkinan data NULL atau tidak valid pada kolom penting dan menyederhanakan kueri dengan menghilangkan kebutuhan menangani kasus default secara eksplisit.

Hasil:

Field

Type

Null

Key

Default

Extra

id

INT

NO

PRI

NULL

AUTO_INCREMENT

name

VARCHAR(50)

YES

 

NULL

 

status

VARCHAR(10)

YES

 

active

 

Perintah ini bermanfaat karena:

  • Membantu pengembang memahami skema tabel sebelum menulis kueri.
  • Dapat digunakan untuk debugging, terutama saat bekerja dengan basis data yang belum familiar.
  • Dengan cepat mengidentifikasi constraint, seperti primary key atau default.

19. Bagaimana Anda menggunakan fungsi string di SQL untuk mengelola teks? 

Berbagai fungsi string di SQL bekerja dengan nama dan data teks lainnya. Misalnya:

  • Fungsi LENGTH() menampilkan jumlah karakter dalam sebuah nama. 
  • UPPER() dan LOWER() mengonversi teks menjadi huruf besar semua atau huruf kecil semua. 
  • CONCAT() menggabungkan nama depan dan nama belakang dalam satu kolom. 
  • SUBSTRING() mengekstrak bagian tertentu dari teks. Misalnya, kita bisa menggunakannya untuk memisahkan bulan dari tanggal lahir. 

Berikut contoh kuerinya:

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;

Kueri ini:

  • Mengonversi nama menjadi huruf besar.
  • Menggabungkan nama depan dan belakang menjadi nama lengkap.
  • Mengekstrak bulan lahir dari kolom birthdate.
  • Menghapus spasi pada nama belakang.
  • Mengganti semua kemunculan "a" dengan "@" pada nama depan.

20. Bagaimana Anda memperbarui baris tertentu dalam basis data dengan SQL?

Anda dapat menggunakan pernyataan UPDATE dan klausa WHERE untuk mengidentifikasi catatan yang ingin diubah. 

Misalnya, jika Anda ingin memperbarui genre film “Inception” tahun 2010 menjadi “Sci-fi,” Anda dapat menggunakan kueri berikut: 

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

Di sini, UPDATE movies menentukan tabel yang ingin kita perbarui, dan klausa WHERE menargetkan baris dengan judul “Inception” dan tahun “2010”. 

Pertanyaan Wawancara MySQL Tingkat Lanjutan

Pertanyaan tingkat lanjut menguji kemampuan Anda menangani skenario MySQL yang kompleks dan memberi gambaran kepada pewawancara tentang kemampuan pengambilan keputusan Anda. 

21. Apa itu trigger di MySQL? Bagaimana cara mengimplementasikannya? 

Di MySQL, trigger adalah sekumpulan aksi yang dijalankan saat terjadi suatu peristiwa pada basis data. Trigger dapat dikonfigurasi untuk dieksekusi sebelum atau sesudah peristiwa seperti INSERT, UPDATE, atau DELETE

Misalnya, terdapat tabel orders tempat pesanan baru ditambahkan. Kita dapat membuat trigger yang mencatat setiap pesanan baru ke 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;

Setelah trigger berjalan, tabel order_history akan diperbarui secara otomatis:

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. Mengapa menambahkan indeks membuat kueri SQL lebih cepat? 

Jika tidak ada indeks, basis data harus memindai setiap baris untuk menemukan entri tertentu. Indeks bertindak seperti daftar isi, yang memungkinkan basis data mengakses baris yang relevan. Jadi, menambahkan indeks mengurangi waktu pencarian dan membuat kueri berjalan lebih cepat. 

Indeks biasanya diimplementasikan menggunakan struktur data seperti B-tree atau hash table, yang memungkinkan basis data melakukan pencarian, lookup, dan pemindaian rentang secara efisien.

Berikut contoh cara membuat indeks:

-- Tanpa indeks:
SELECT * FROM employees WHERE last_name = 'Smith';
-- Menambahkan indeks pada kolom last_name:
CREATE INDEX idx_last_name ON employees(last_name);
-- Dengan indeks, basis data dapat dengan cepat menemukan baris yang memiliki 'Smith' pada kolom last_name.

Indeks memiliki beberapa kelemahan, misalnya:

  • Operasi tulis lebih lambat: INSERT, UPDATE, dan DELETE menjadi lebih lambat karena indeks harus diperbarui setiap kali data berubah.
  • Biaya penyimpanan: Indeks memerlukan ruang penyimpanan tambahan.

23. Tipe data apa yang kita gunakan untuk berat dan harga produk dalam tabel SQL, dan mengapa? 

Kita menggunakan tipe data FLOAT atau REAL untuk menyimpan berat karena berat sering kali memiliki nilai desimal dan dapat menerima sedikit margin kesalahan. Karena tipe data ini menyimpan nilai perkiraan, tipe ini lebih cocok untuk kolom berat. 

Tipe data DECIMAL umum digunakan untuk menyimpan harga karena nilai finansial seperti harga tidak menerima pembulatan sekecil apa pun. Akurasi ini hanya diperoleh dengan tipe data desimal (misalnya DECIMAL(10, 2) untuk 10 digit, dengan 2 digit setelah koma).

24. Bagaimana cara menemukan baris duplikat di SQL dengan window function? 

Berikut cara menemukan duplikasi menggunakan window function 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;

Mari kita uraikan bagaimana ini bekerja:

1. ROW_NUMBER() memberikan nomor pada setiap baris dalam hasil kita. 

2. PARTITION BY mengelompokkan baris berdasarkan product_name dan category

3. Di dalam setiap grup, baris dinomori mulai dari 1. 

4. Setiap row_num lebih dari 1 menunjukkan duplikasi. 

Misalnya, jika kita memiliki catatan berikut:

  • Produk A, Kategori X, row_num = 1
  • Produk A, Kategori X, row_num = 2 (duplikat)
  • Produk B, Kategori Y, row_num = 1

Kueri akan menampilkan baris kedua karena row_num-nya lebih dari 1.

25. Bagaimana cara membuat dan menggunakan stored procedure dengan parameter di MySQL? Jelaskan dengan contoh. 

Kita dapat menyimpan dan mengulang penggunaan kueri kompleks dengan stored procedure untuk membuat operasi basis data lebih efisien dan mudah dipelihara. Mari kita lihat cara membuat dan menggunakannya dengan parameter melalui contoh praktis.

Misalkan kita memiliki basis data mahasiswa dan ingin membuat prosedur untuk menyaring mahasiswa berdasarkan usia. Berikut caranya:

Pertama, mari buat stored procedure sederhana yang menerima parameter usia:

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

Untuk menggunakan prosedur ini, kita cukup CALL dengan usia yang diinginkan:

CALL get_student_info(21);

Kita dapat membuat prosedur lebih canggih dengan menggunakan parameter keluaran. Misalnya, mari buat prosedur yang menghitung jumlah mahasiswa pada usia tertentu:

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;

Untuk mendapatkan hasil dari prosedur ini:

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

26. Mengapa integritas referensial penting dalam basis data? 

Integritas referensial menjaga keakuratan hubungan antar tabel. Saat kita membuat foreign key, hal ini memastikan bahwa nilai pada sebuah tabel cocok dengan nilai unik pada tabel yang dirujuk.

Contoh praktis: Misalkan Anda mengelola basis data e-commerce. Anda memiliki tabel Customers dan tabel Orders. Setiap pesanan harus dimiliki oleh pelanggan yang nyata. Integritas referensial, yang diimplementasikan melalui foreign key, menegakkan hubungan ini dengan memastikan bahwa:

  • Anda tidak dapat membuat pesanan untuk pelanggan yang tidak ada.
  • Anda tidak dapat menghapus pelanggan yang memiliki pesanan yang masih ada (kecuali Anda secara spesifik mengonfigurasi apa yang harus terjadi pada pesanan tersebut).
  • Anda tidak dapat memperbarui ID pelanggan jika pelanggan tersebut memiliki pesanan yang ada.

Jadi saat Anda membuat constraint foreign key seperti ini:

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

Basis data secara otomatis menegakkan aturan ini:

  • Setiap CustomerID di tabel Orders harus ada di tabel Customers.
  • Upaya melanggar aturan ini (seperti menyisipkan CustomerID yang tidak valid) akan ditolak.

Ini mencegah inkonsistensi data yang dapat menyebabkan masalah serius, seperti pesanan yang tidak dapat ditelusuri ke pelanggan sebenarnya atau laporan yang dihasilkan dengan informasi pelanggan yang hilang. 

Pertanyaan Wawancara MySQL untuk Administrator Basis Data

Jika Anda secara khusus melamar sebagai administrator basis data, berikut beberapa pertanyaan yang dapat diajukan perekrut.

27. Mengapa aplikasi berskala besar menggunakan database sharding? Jelaskan juga tantangannya. 

Aplikasi besar menggunakan database sharding untuk membagi data besar di banyak server. Setiap bagian atau shard berisi sebagian kecil data. Karena beban data tersebar, tidak diperlukan perangkat keras kelas atas. Meskipun kecepatan dan skalabilitas meningkat, ada pula tantangannya: 

  • Beberapa kueri seperti join mungkin tidak berfungsi, yang dapat mempersulit pengelolaan data. 
  • Saat data tumbuh, shard dapat kewalahan, menciptakan hotspot yang memperlambat kinerja. 

28. Jelaskan peran redo log dalam pemulihan saat MySQL crash. 

Setiap kali data dimodifikasi di MySQL, data perlu ditulis ke disk. Namun, menulis langsung ke berkas data itu lambat dan berisiko. Karena itu, sebelum MySQL memodifikasi berkas data apa pun, MySQL terlebih dahulu menuliskan apa yang akan dilakukan ke redo log. Ini lebih aman daripada memperbarui berkas data secara acak.

Jadi, misalkan Anda memperbarui alamat pelanggan:

  1. MySQL pertama-tama menulis perubahan ini ke redo log.
  2. MySQL kemudian mengakui transaksi Anda sebagai telah di-commit.
  3. Akhirnya, MySQL menerapkan perubahan ke berkas data aktual.

Pemulihan saat crash menjadi penting jika MySQL crash setelah langkah 1 atau 2 tetapi sebelum langkah 3. Saat MySQL dimulai ulang, MySQL melihat redo log-nya dan kemudian menyelesaikan pekerjaan yang belum selesai dengan memutar ulang perubahan yang tercatat di redo log. Ini menjamin bahwa transaksi yang sudah di-commit tidak hilang, bahkan jika MySQL crash pada momen yang tidak tepat.

29. Apa saja mesin penyimpanan yang tersedia di MySQL, dan bagaimana perbedaannya?

MySQL mendukung beberapa mesin penyimpanan , masing-masing dioptimalkan untuk kasus penggunaan yang berbeda. Berikut perbandingan yang paling umum:

Mesin penyimpanan

Fitur

Kasus penggunaan

InnoDB

- Mesin penyimpanan default.

- Mematuhi ACID.

- Penguncian tingkat baris.

- Mendukung transaksi dan foreign key.

Aplikasi yang memerlukan integritas data tinggi, seperti platform e-commerce atau sistem keuangan.

MyISAM

- Cepat untuk operasi baca berat.

- Penguncian tingkat tabel.

- Tidak mendukung transaksi atau foreign key.

Aplikasi yang intensif baca di mana kecepatan lebih penting daripada integritas data.

Memory

- Menyimpan data di RAM.

- Sangat cepat.

- Data hilang saat restart.

- Ukuran terbatas.

Penyimpanan data sementara, caching, atau manajemen sesi.

CSV

- Menyimpan data dalam berkas CSV biasa.

- Integrasi mudah dengan alat eksternal.

- Tidak ada dukungan indeks.

Pertukaran data antar aplikasi atau penyimpanan data sederhana tanpa kebutuhan kueri yang kompleks.

Archive

- Dioptimalkan untuk kompresi tinggi.

- Hanya mendukung operasi INSERT dan SELECT.

- Tanpa indeks.

Penyimpanan data historis atau log yang jarang diambil kembali.

NDB (Clustered)

- Penyimpanan terdistribusi untuk MySQL Cluster.

- Ketersediaan tinggi dan toleransi kesalahan.

- Mendukung transaksi.

Aplikasi terdistribusi skala besar yang memerlukan kinerja real-time.

30. Bagaimana cara menetapkan mesin penyimpanan default di MySQL? 

Pertama, Anda dapat memeriksa mesin penyimpanan default saat ini:

SHOW ENGINES;

InnoDB direkomendasikan sebagai mesin default karena mendukung fitur penting seperti:

  • Transaksi yang mematuhi ACID
  • Constraint foreign key
  • Pemulihan saat crash
  • Penguncian tingkat baris

Untuk sementara mengubah mesin default untuk sesi Anda saat ini, Anda dapat menggunakan:

SET default_storage_engine = 'InnoDB';

Untuk perubahan permanen, Anda dapat memodifikasi berkas konfigurasi MySQL dengan menambahkan baris ini di bawah bagian [mysqld]:

default-storage-engine = InnoDB

31. Bagaimana Anda memperbaiki tabel yang rusak (corrupted) di MySQL? 

Pertama, Anda dapat memeriksa semua basis data dengan perintah ini: 

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

Perintah ini akan memindai semua tabel dan melaporkan jika ada kerusakan. Lalu, Anda dapat menjalankan perintah berikut untuk memperbaiki tabel: 

mysqlcheck --repair database_name table_name -u root -p

Perbaikan dapat menyebabkan kehilangan data pada kasus kerusakan parah, jadi pastikan untuk mencadangkan data.

Pertanyaan Wawancara MySQL Berbasis Skenario dan Pemecahan Masalah

Pertanyaan-pertanyaan ini menilai pengalaman Anda dengan skenario kompleks dunia nyata dan kemampuan pemecahan masalah.

32. Jelaskan skenario saat Anda menggunakan subquery di MySQL.

Berikut cara Anda dapat merespons pertanyaan seperti ini:

Saya mengelola basis data toko e-commerce di pekerjaan terakhir saya, di mana saya harus menyiapkan laporan produk. Tujuannya adalah menemukan produk yang menghasilkan penjualan di atas rata-rata, yang memerlukan penggunaan subquery untuk melakukan analisis bertahap.

Berikut kueri SQL yang saya kembangkan untuk menyelesaikannya:

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;

Pertama, saya menetapkan tolok ukur dengan menghitung rata-rata nilai penjualan di semua produk. Untuk itu, saya menggunakan subquery di klausa WHERE yang menghitung AVG(sales_amount) dari tabel sales. Subquery ini berfungsi sebagai ambang batas dinamis untuk mengukur kinerja setiap produk.

Kueri utama kemudian melakukan join tabel products dan sales untuk mengambil detail produk yang relevan, sementara klausa WHERE menyaring produk dengan penjualan di bawah rata-rata yang dihitung. 

Dengan menyusun kueri seperti ini, saya dapat mengidentifikasi produk berperforma tinggi dalam satu operasi basis data alih-alih menjalankan banyak kueri terpisah.

33. Dapatkah Anda menjelaskan situasi ketika Anda menggunakan SQL join untuk menggabungkan data dari beberapa tabel? 

Berikut contoh jawaban untuk pertanyaan di atas:

Baru-baru ini, saya mengerjakan proyek dengan dua tabel utama — satu berisi data penjualan produk dan satu lagi berisi detail produk. Tugas saya adalah membuat laporan yang menampilkan sales, product name, category, dan price.

Untuk menggabungkan data yang relevan, saya menggunakan INNER JOIN pada kolom umum product_id untuk menautkan transaksi penjualan dengan detail produk:

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;

Laporan tersebut memberikan gambaran tren penjualan yang jelas, membantu pemangku kepentingan mengidentifikasi kategori produk yang berkinerja baik dan yang perlu mendapat perhatian.

34. Apakah Anda memiliki pengalaman dengan trigger? Jelaskan bagaimana Anda menggunakannya.

Berikut contoh respons untuk pertanyaan di atas:

Ya, saya memiliki banyak pengalaman dengan trigger basis data. Dalam peran terakhir saya, saya mengimplementasikan trigger AFTER UPDATE untuk audit perubahan harga. 

Izinkan saya jelaskan implementasinya: Saya membuat trigger yang secara otomatis menangkap riwayat harga setiap kali harga produk berubah. Berikut skrip SQL yang saya kembangkan:

CREATE TRIGGER tr_AuditPriceChanges
ON Products
AFTER UPDATE AS
BEGIN
    -- Hanya dijalankan jika harga benar-benar berubah
    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;

Yang membuat solusi ini efektif adalah:

  1. Trigger hanya berjalan saat benar-benar terjadi perubahan harga.
  2. Trigger menangkap pengguna yang melakukan perubahan menggunakan SYSTEM_USER.
  3. Trigger menghitung persentase perubahan untuk keperluan pelaporan.
  4. Trigger menyertakan klausa WHERE untuk menyaring non-perubahan yang mungkin terjadi dari pembaruan kolom lain.

Saya juga menambahkan penanganan kesalahan dan pencatatan saat kami menemukan kasus tepi dengan harga NULL.

Tips Mempersiapkan Wawancara MySQL

Jika Anda baru memulai karier, berikut beberapa tips yang akan membantu Anda sukses dalam wawancara mendatang:

Kuasai konsep inti MySQL: Pelajari dasar-dasar basis data seperti pengindeksan, transaksi, dan pengoptimal kueri. Pahami bagaimana MySQL memproses kueri dan mengelola penyimpanan data. Ini akan membantu Anda menulis kueri yang efisien dan menjelaskan solusi Anda saat wawancara.

Dapatkan pengalaman langsung: Instal MySQL di komputer Anda dan latihan secara rutin. Buat basis data uji, tulis berbagai jenis kueri, dan coba optimalkan. Latihan nyata adalah cara terbaik untuk memahami cara kerja dan membangun kepercayaan diri untuk wawancara.

Untuk mempertajam pengetahuan Anda lebih lanjut, lihat sumber daya DataCamp: 

Pelajari alat dan integrasi MySQL: Kenali MySQL Workbench atau alat lain untuk manajemen basis data dan pemantauan dasar. Anda juga dapat mengeksplorasi bagaimana MySQL bekerja dengan Python dan kerangka kerja terkait, menunjukkan bahwa Anda dapat bekerja di lingkungan pengembangan nyata.

Kesimpulan

Itu dia! Saya telah membahas 34 pertanyaan wawancara MySQL teratas untuk membantu Anda mendapatkan pekerjaan berikutnya. Baik Anda melamar peran tingkat pemula maupun posisi administrator data tingkat lanjut, Anda harus memiliki pemahaman yang kuat tentang dasar-dasar MySQL, pengoptimalan kueri, dan manajemen basis data untuk menonjol. 

Untuk memperluas pengetahuan Anda tentang sistem manajemen basis data lainnya, lihat kursus SQL DataCamp.


Laiba Siddiqui's photo
Author
Laiba Siddiqui
LinkedIn
Twitter

Saya seorang ahli strategi konten yang senang menyederhanakan topik kompleks. Saya telah membantu perusahaan seperti Splunk, Hackernoon, dan Tiiny Host membuat konten yang menarik dan informatif untuk audiens mereka.

Topik

Pelajari lebih lanjut tentang SQL dengan kursus-kursus ini!

Kursus

Manipulasi Data di SQL

4 Hr
317K
Kuasai kueri SQL yang kompleks yang diperlukan untuk menjawab berbagai pertanyaan ilmu data dan menyiapkan set data yang kuat untuk analisis di PostgreSQL.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow
Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

12 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

Lihat Lebih BanyakLihat Lebih Banyak