Kursus
Pernahkah Anda memperhatikan bahwa MySQL hampir selalu tercantum dalam deskripsi pekerjaan yang terkait basis data? Ada alasannya — MySQL pada dasarnya menggerakkan segalanya, mulai 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 semuanya, dari dasar-dasar yang perlu diketahui pengembang junior hingga materi tingkat lanjut yang dibutuhkan untuk peran senior. Selain itu, saya akan berbagi beberapa tips agar Anda tampil 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. MySQL dikembangkan oleh Oracle Corporation.
MySQL menempati peringkat sebagai DBMS paling populer pada 2024. Namun, Survei Pengembang Stack Overflow pada 2025 menunjukkan bahwa PostgreSQL menempati peringkat sebagai basis data yang paling banyak digunakan di kalangan pengembang profesional, untuk pertama kalinya melampaui MySQL.
Jangan salah paham: MySQL masih sangat populer — mencapai penggunaan 40,5% di kalangan pengembang pada 2025 — dan tetap menggerakkan banyak aplikasi web, sistem manajemen konten, dan alat enterprise. Terutama jika Anda bekerja dengan aplikasi web atau tumpukan LAMP, MySQL adalah keterampilan kelas atas yang patut dimiliki.

Pada 2024, MySQL adalah 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 basis data dan MySQL.
1. Apa itu basis data, dan apa bedanya 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 kiriman kita di dalam basis data.
DBMS (Database Management System) adalah perangkat lunak yang memungkinkan kita berinteraksi dan mengelola data tersebut dengan membuat pengguna dan mengelola hak aksesnya. MySQL adalah salah satu opsi DBMS paling populer. Contoh lainnya include 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 performa: MySQL sering dipuji karena kesederhanaannya dan performa yang dioptimalkan, menjadikannya pilihan andalan bagi pengembang web dan startup.
- Fitur lanjutan: Meski unggul dalam kemudahan penggunaan, MySQL mungkin kurang fitur lanjutan yang ada pada RDBMS lain seperti PostgreSQL, misalnya dukungan ACID yang lebih komprehensif, pengindeksan lanjutan, dan himpunan tipe data yang lebih luas.
- Mesin penyimpanan: MySQL memungkinkan Anda memilih mesin penyimpanan berbeda (misalnya, InnoDB, MyISAM) untuk tabel, memberikan fleksibilitas untuk kasus penggunaan tertentu.
MySQL ideal untuk skenario yang membutuhkan kecepatan dan skalabilitas, namun untuk fitur yang lebih kompleks atau kelas 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 titik desimal. Kita dapat menggunakannya jika tidak memerlukan pecahan. Sebaliknya, DECIMAL dapat menyimpan nilai finansial dan cocok untuk perhitungan presisi dengan desimal.
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, fungsi DATETIME menyimpan tanggal beserta waktu, dan tampilannya seperti ini:
YYYY-MM-DD HH:MM:SS
6. Apa itu foreign key, dan bagaimana Anda menggunakannya di basis data?
Foreign key adalah kolom pada satu tabel yang menaut ke primary key pada tabel lain.
Misalnya, dalam 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. customer_id pada tabel transactions akan menautkan setiap pembelian ke pelanggan tertentu di tabel customers .
Berikut tampakannya 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 yang berelasi. Berikut perbedaannya:
-
INNER JOIN: Mengembalikan baris yang memiliki kecocokan di kedua tabel.
-
LEFT JOIN: Mengembalikan semua baris dari tabel kiri dan baris yang cocok dari tabel kanan. Jika tidak ada kecocokan,
NULLdikembalikan untuk kolom tabel kanan. -
RIGHT JOIN: Mirip dengan
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. Catatan: MySQL tidak mendukung sintaksFULL JOINsecara native. Untuk mencapai hasil yang sama, gunakanUNIONdariLEFT JOINdanRIGHT JOIN
8. Apa perbedaan antara DELETE, TRUNCATE, dan DROP di MySQL?
Perintah seperti DELETE, TRUNCATE, dan DROP terdengar mirip, tetapi sebenarnya perilakunya berbeda:
DELETE: Menghapus baris dari tabel berdasarkan kondisi. Dapat dibatalkan 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 dibatalkan. Contoh:
TRUNCATE TABLE employees;
DROP: Sepenuhnya menghapus struktur dan data tabel, beserta dependensinya seperti indeks. Contoh:
DROP TABLE employees;
9. Bagaimana Anda membuat dan memodifikasi tabel di MySQL? Berikan contoh.
Untuk membuat tabel, Anda dapat menggunakan pernyataan CREATE TABLE, dan untuk memodifikasi, biasanya ALTER TABLE. Berikut beberapa contohnya:
Membuat tabel:
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50));
Memodifikasi untuk menambahkan 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 kita menutup sesi, tabel akan dihapus. Jenis tabel 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 bersarang) ditempatkan di dalam kueri lain. Pendekatan ini memecah operasi basis data yang kompleks menjadi langkah-langkah yang lebih mudah dikelola. Misalnya, Anda dapat membuat subquery untuk menemukan karyawan yang berpenghasilan 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 kemudian menggunakan rata-rata tersebut untuk menemukan karyawan yang berpenghasilan di atasnya.
12. Bagaimana Anda menggunakan pernyataan INSERT di MySQL untuk menambahkan data ke tabel? Adakah praktik terbaik untuk ini?
Kita dapat menggunakan pernyataan INSERT untuk menambahkan data ke tabel. Sintaks dasarnya adalah:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
Berikut beberapa praktik terbaik saat menggunakan pernyataan 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, tetapi keduanya bisa digunakan.
-
Jika Anda menyisipkan banyak baris, lakukan dalam satu pernyataan untuk performa 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 dari 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 yang berfungsi seperti tabel virtual. Dengan ini, kita dapat mengambil kueri kompleks, memberinya nama, dan menggunakannya seperti tabel untuk kueri di masa mendatang. Dengan begitu, Anda tidak perlu mengetik ulang seluruh kueri setiap saat.
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 mengkueri view employee_details layaknya tabel:
SELECT * FROM employee_details;
Namun, kita tidak dapat menggunakan view untuk menyisipkan dan memperbarui data. Sebagian besar mendukung opsi hanya-baca dan mencegah pengguna mengakses basis data secara langsung, sehingga meningkatkan keamanan data. View terkadang dapat memperlambat kueri, karena setiap kali diakses, kueri dasarnya dijalankan.
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 menyimpan riwayat lengkap perubahan yang dibuat pada 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 valid. Saat kita menyisipkan, memperbarui, atau menghapus data, penanda waktu ini akan diperbarui:
-
Insert: Baris baru ditambahkan dengan
StartTimediatur ke stempel waktu saat ini danEndTime9999-12-31 23:59:59— nilaiDATETIMEmaksimum MySQL, digunakan sebagai penanda untuk mewakili 'baris ini saat ini aktif' -
Update:
EndTimebaris asli diperbarui ke stempel waktu saat ini untuk menandai bahwa baris tersebut tidak lagi valid. Kemudian, baris baru dengan data yang diperbarui dibuat, denganStartTimediatur ke stempel waktu saat ini danEndTimesebagai "selamanya." -
Delete:
EndTimepada baris yang ada diperbarui ke stempel waktu saat ini, menandakan baris tersebut tidak lagi valid.
Dengan klausa FOR SYSTEM_TIME di SQL, Anda dapat mengkueri tabel untuk melihat keadaannya pada waktu tertentu atau rentang waktu. Misalnya:
-
FOR SYSTEM_TIME AS OF '2024-01-01': Mengambil keadaan tabel sebagaimana adanya 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 dieksekusi 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; -- Membatalkan perubahan
17. Apa itu default constraint di MySQL? Bagaimana cara menetapkan nilai default untuk sebuah kolom?
Default constraint di MySQL memberikan nilai baku pada kolom ketika tidak ada nilai eksplisit yang disediakan selama operasi INSERT. Ini memastikan kolom tetap valid meskipun pengguna mengabaikannya 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 dapat menyisipkan baris tanpa menentukan status:
INSERT INTO employees (name) VALUES ('John Doe');
Pendekatan ini mengurangi kemungkinan data NULL atau tidak valid pada kolom kritis dan menyederhanakan kueri dengan menghilangkan kebutuhan menangani kasus default secara eksplisit.
|
Field |
Tipe |
Null |
Key |
Default |
Ekstra |
|
id |
INT |
NO |
PRI |
NULL |
AUTO_INCREMENT |
|
name |
VARCHAR(50) |
YES |
NULL |
||
|
status |
VARCHAR(10) |
YES |
active |
Perintah ini berguna 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.
18. Apa perbedaan antara CHAR dan VARCHAR di MySQL?
Keduanya menyimpan data string, tetapi cara penanganan penyimpanannya berbeda:
-
CHAR(n)selalu menyimpan tepatnkarakter, mengisi dengan spasi jika nilainya lebih pendek. Tipe ini berdimensi tetap (fixed-length), yang membuatnya sedikit lebih cepat untuk kolom yang semua nilainya memiliki panjang sama, seperti kode negara atau penanda status. -
VARCHAR(n)hanya menyimpan karakter aktual yang dimasukkan, hingga maksimumn. Tipe ini menggunakan lebih sedikit penyimpanan untuk data berdimensi variabel, tetapi memiliki overhead kecil untuk melacak panjangnya.
CREATE TABLE example (
country_code CHAR(2), -- Always 2 chars, e.g. 'US', 'UK'
email VARCHAR(255) -- Variable length up to 255 chars
);
Aturan praktisnya: gunakan CHAR untuk nilai berdimensi tetap, VARCHAR untuk sisanya.
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()mengubah 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 dapat 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 nama 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 di basis data dengan SQL?
Anda dapat menggunakan pernyataan UPDATE dan klausa WHERE untuk mengidentifikasi catatan yang ingin diubah.
Sebagai contoh, jika Anda ingin memperbarui genre film “Inception” dari 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 Lanjut
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 serangkaian aksi yang berjalan ketika suatu peristiwa basis data terjadi. Trigger dapat dikonfigurasi untuk dieksekusi sebelum atau sesudah peristiwa seperti INSERT, UPDATE, atau DELETE.
Sebagai contoh, misalkan ada 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 isecara otomatis diperbarui:
|
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 menjadi lebih cepat?
Jika tidak ada indeks, basis data harus memindai setiap baris untuk menemukan entri tertentu. Indeks bertindak seperti daftar isi, 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 dengan efisien.
Berikut contoh cara membuat indeks:
-- Without an index:
SELECT * FROM employees WHERE last_name = 'Smith';
-- Adding an index on the last_name column:
CREATE INDEX idx_last_name ON employees(last_name);
-- With the index, the database can quickly locate rows with 'Smith' in the last_name column.
Indeks memiliki beberapa kekurangan, misalnya:
-
Operasi tulis lebih lambat: operasi
INSERT,UPDATE, danDELETElebih 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?
Untuk berat, DECIMAL umumnya pilihan yang lebih aman. Meskipun FLOAT dan REAL dapat menyimpan nilai desimal, keduanya menggunakan aritmetika floating-point yang dapat menimbulkan kesalahan pembulatan kecil.
Untuk berat produk yang membutuhkan akurasi (misalnya, perhitungan pengiriman, inventaris), DECIMAL(8, 3) memberi Anda kendali presisi dengan 3 tempat desimal tanpa kejutan pembulatan. FLOAT dapat diterima hanya ketika margin kesalahan kecil masih bisa ditoleransi.
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 cara kerjanya:
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 diberi nomor mulai dari 1.
4. Setiap row_num lebih dari 1 menandakan duplikat.
Sebagai contoh, jika kita memiliki data 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 Anda membuat dan menggunakan stored procedure dengan parameter di MySQL? Jelaskan dengan contoh.
Kita dapat menyimpan dan menggunakan ulang kueri kompleks dengan stored procedure untuk membuat operasi basis data lebih efisien dan mudah dipelihara. Mari lihat cara membuat dan menggunakannya dengan parameter melalui contoh praktis.
Misalkan kita memiliki basis data mahasiswa dan ingin membuat prosedur untuk memfilter 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 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, ini memastikan bahwa nilai pada satu 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:
- 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 masih 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 berikut:
-
Setiap
CustomerIDdi tabelOrdersharus ada di tabelCustomers. -
Upaya melanggar aturan ini (seperti memasukkan
CustomerIDyang tidak valid) akan ditolak.
Ini mencegah inkonsistensi data yang dapat menimbulkan 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 peran administrator basis data, berikut beberapa pertanyaan yang dapat diajukan perekrut.
27. Mengapa aplikasi besar menggunakan database sharding? Sebutkan juga tantangannya.
Aplikasi besar menggunakan database sharding untuk membagi data besar ke beberapa server. Setiap bagian atau shard berisi sebagian kecil data. Karena beban data tersebar, tidak perlu perangkat keras kelas atas. Meskipun kecepatan dan skalabilitas juga meningkat, ada beberapa tantangan:
- Beberapa kueri seperti join mungkin tidak berfungsi, yang dapat mempersulit pengelolaan data.
- Saat data tumbuh, shard dapat kewalahan, menciptakan hotspot yang memperlambat performa.
28. Jelaskan peran redo log dalam pemulihan saat MySQL crash.
Setiap kali data dimodifikasi di MySQL, data perlu dituliskan 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 dalam redo log. Ini lebih aman daripada memperbarui berkas data secara acak.
Jadi, misalkan Anda memperbarui alamat pelanggan:
- MySQL terlebih dahulu menulis perubahan ini ke redo log.
- Kemudian MySQL mengakui transaksi Anda sebagai telah dikomit.
- Pada akhirnya, MySQL menerapkan perubahan ke berkas data yang sebenarnya.
Pemulihan saat crash menjadi penting jika MySQL crash setelah langkah 1 atau 2 tetapi sebelum langkah 3. Saat MySQL memulai kembali, MySQL melihat redo log dan menyelesaikan pekerjaan yang belum selesai dengan memutar ulang perubahan yang tercatat dalam redo log. Ini menjamin bahwa transaksi yang telah dikomit 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 multiple storage engines, masing-masing dioptimalkan untuk kasus penggunaan berbeda. Berikut perbandingan yang paling umum:
| Mesin Penyimpanan | Fitur Utama | Terbaik Untuk |
|---|---|---|
| InnoDB | Mesin default. Sesuai ACID, kunci tingkat baris, transaksi dan foreign key. | E-commerce, sistem keuangan, apa pun yang memerlukan integritas data. |
| MyISAM | Baca cepat, kunci tingkat tabel. Tanpa transaksi atau foreign key. | Aplikasi dengan beban baca tinggi yang lebih mementingkan kecepatan daripada integritas. |
| Memory | Data disimpan di RAM. Sangat cepat tetapi hilang saat restart. | Caching, manajemen sesi, data sementara. |
| CSV | Menyimpan data sebagai berkas CSV biasa. Tanpa pengindeksan. | Pertukaran data antar aplikasi atau penyimpanan flat-file sederhana. |
| Archive | Kompresi tinggi. Hanya INSERT dan SELECT. Tanpa indeks. | Data log atau catatan historis yang jarang diquery. |
| NDB (Clustered) | Penyimpanan terdistribusi, ketersediaan tinggi, toleran kesalahan, mendukung transaksi. | Aplikasi terdistribusi skala besar yang membutuhkan performa real-time. |
30. Bagaimana Anda 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 sesuai ACID
- Foreign key constraints
- Pemulihan saat crash
- Penguncian tingkat baris
Untuk sementara mengubah mesin default untuk sesi 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 korup 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 korupsi. Kemudian, Anda dapat menjalankan kueri berikut untuk memperbaiki tabel:
mysqlcheck --repair database_name table_name -u root -p
Perbaikan dapat menyebabkan kehilangan data dalam kasus korupsi parah, jadi pastikan untuk mencadangkan data.
Pertanyaan Wawancara MySQL Berbasis Skenario dan Pemecahan Masalah
Pertanyaan-pertanyaan ini mengukur pengalaman Anda dengan skenario kompleks di 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 mengharuskan penggunaan subquery untuk melakukan analisis bertahap ini.
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 patokan dengan menghitung jumlah penjualan rata-rata di seluruh produk. Untuk melakukannya, saya menggunakan subquery dalam klausa WHERE yang menghitung AVG(sales_amount) dari tabel sales. Subquery ini bertindak sebagai ambang dinamis untuk mengukur kinerja setiap produk.
Kueri utama kemudian melakukan join pada 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 berkinerja tinggi dalam satu operasi basis data alih-alih menjalankan beberapa kueri terpisah.
33. Dapatkah Anda menjelaskan situasi saat Anda menggunakan SQL join untuk menggabungkan data dari beberapa tabel?
Berikut contoh jawaban untuk pertanyaan di atas:
Baru-baru ini, saya mengerjakan proyek yang memiliki dua tabel utama — satu berisi data penjualan produk dan satu lagi berisi detail produk. Tugas saya adalah membuat laporan yang menampilkan penjualan, nama produk, kategori, dan harga.
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 jelas tentang tren penjualan, membantu para 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 pengalaman luas dengan trigger basis data. Dalam peran terakhir saya, saya mengimplementasikan trigger AFTER UPDATE untuk audit perubahan harga.
Izinkan saya menjelaskan implementasi spesifiknya: Saya membuat trigger yang secara otomatis menangkap riwayat harga setiap kali harga produk berubah. Berikut skrip SQL yang saya kembangkan:
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;
Yang membuat solusi ini efektif adalah:
- Trigger hanya berjalan ketika perubahan harga benar-benar terjadi.
- 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 ketika kami menemukan beberapa 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 indexing, transaksi, dan query optimizer. 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 praktikkan 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 mengasah pengetahuan Anda lebih lanjut, lihat sumber daya DataCamp:
- Untuk pengantar SQL: Kursus Introduction to SQL
- Untuk berlatih 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 cara 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 atau posisi administrator data tingkat lanjut, Anda harus memiliki pemahaman yang kuat tentang dasar-dasar MySQL, optimasi kueri, dan manajemen basis data agar 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.
