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

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 JOINdanRIGHT 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
DELETEdan 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:
- Kueri dalam
SELECT AVG(salary) FROM employeesterlebih dahulu menghitung gaji rata-rata. - 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():
- Cantumkan kolom secara eksplisit. Ini membuat kode lebih jelas dan mencegah kesalahan jika struktur tabel berubah di kemudian hari.
- Untuk kolom
AUTO_INCREMENTseperti ID, lewati dalam pernyataanINSERT(). MySQL menanganinya secara otomatis untuk mencegah ID duplikat. - Konsisten dalam penggunaan tanda kutip string. Saya pribadi lebih suka tanda kutip tunggal, namun keduanya bisa digunakan.
- 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
StartTimedisetel ke stempel waktu saat ini danEndTime9999-12-31 23:59:59(atau nilai serupa yang mewakili "selamanya"). Ini menunjukkan bahwa baris tersebut saat ini valid. - Update:
EndTimebaris asli diperbarui ke stempel waktu saat ini untuk menandai bahwa baris tersebut tidak lagi valid. Lalu, baris baru dengan data terbaru dibuat, denganStartTimedisetel ke stempel waktu saat ini danEndTimesebagai "selamanya". - Delete:
EndTimebaris 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()danLOWER()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, danDELETEmenjadi 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
CustomerIDdi tabelOrdersharus ada di tabelCustomers. - Upaya melanggar aturan ini (seperti menyisipkan
CustomerIDyang 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:
- MySQL pertama-tama menulis perubahan ini ke redo log.
- MySQL kemudian mengakui transaksi Anda sebagai telah di-commit.
- 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:
- Trigger hanya berjalan saat benar-benar terjadi perubahan harga.
- Trigger menangkap pengguna yang melakukan perubahan menggunakan
SYSTEM_USER. - Trigger menghitung persentase perubahan untuk keperluan pelaporan.
- Trigger menyertakan klausa
WHEREuntuk 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:
- Untuk pengantar SQL: Kursus Introduction to SQL
- Untuk latihan SQL: Applying SQL to real-world problems
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.
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.

