MySQL adalah sistem manajemen basis data relasional (RDBMS) yang paling populer dalam pengembangan web. MySQL sering digunakan bersama PHP untuk membangun website dan aplikasi web dinamis.
Sebelum mempelajari MySQL, Anda disarankan memahami dasar HTML dan PHP terlebih dahulu. Silakan baca Dokumentasi Tag HTML Lengkap dan Dokumentasi PHP Lengkap sebagai fondasi backend.
1. Apa Itu MySQL?
MySQL adalah database relasional open-source yang menggunakan bahasa SQL (Structured Query Language) untuk mengelola data.
Ciri Utama MySQL
- Berbasis tabel (relational database)
- Menggunakan SQL sebagai bahasa query
- Open-source dan gratis
- Digunakan oleh banyak aplikasi web populer
2. Sejarah Singkat MySQL
MySQL dikembangkan oleh perusahaan Swedia bernama MySQL AB dan pertama kali dirilis pada tahun 1995. Saat ini MySQL dikelola oleh Oracle.
Pembahasan lengkap dapat dibaca di: Sejarah MySQL dan Perannya dalam Database Web Modern
3. Konsep Dasar Database Relasional
Database relasional menyimpan data dalam bentuk tabel yang saling berhubungan melalui relasi (relationship).
3.1 Database
Database adalah kumpulan tabel yang menyimpan data terstruktur.
3.2 Tabel
Tabel terdiri dari baris (row) dan kolom (column).
3.3 Record & Field
- Record: satu baris data
- Field: satu kolom data
4. Tipe Data MySQL
| Kategori | Tipe Data | Keterangan |
|---|---|---|
| Numeric | INT | Bilangan bulat |
| Numeric | FLOAT | Bilangan desimal |
| String | VARCHAR | Teks dengan panjang dinamis |
| String | TEXT | Teks panjang |
| Date | DATE | Tanggal |
| Date | DATETIME | Tanggal dan waktu |
5. Struktur Dasar Tabel MySQL
Contoh struktur tabel sederhana:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100),
email VARCHAR(100),
created_at DATETIME
);
6. Primary Key & Auto Increment
Primary key adalah kolom unik yang digunakan untuk mengidentifikasi setiap record.
id INT AUTO_INCREMENT PRIMARY KEY
7. Perintah Dasar SQL
7.1 CREATE DATABASE
CREATE DATABASE belajar_mysql;
7.2 USE DATABASE
USE belajar_mysql;
7.3 DROP DATABASE
DROP DATABASE belajar_mysql;
8. CREATE TABLE
CREATE TABLE produk (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100),
harga INT
);
9. INSERT DATA
INSERT INTO produk (nama, harga)
VALUES ('Laptop', 8000000);
10. SELECT DATA
SELECT * FROM produk;
11. UPDATE DATA
UPDATE produk SET harga = 7500000 WHERE id = 1;
12. DELETE DATA
DELETE FROM produk WHERE id = 1;
13. Relasi MySQL dengan PHP
MySQL paling sering digunakan bersama PHP untuk membangun aplikasi web dinamis. Contoh penggunaannya telah dibahas pada Dokumentasi PHP Lengkap.
Referensi resmi MySQL tersedia di MySQL Official Documentation .
14. SELECT Lanjutan dalam MySQL
Perintah SELECT digunakan untuk mengambil data dari tabel.
MySQL menyediakan berbagai klausa tambahan untuk memfilter dan mengurutkan data.
14.1 SELECT Kolom Tertentu
SELECT nama, harga FROM produk;
14.2 WHERE Clause
WHERE digunakan untuk memfilter data berdasarkan kondisi tertentu.
SELECT * FROM produk WHERE harga > 5000000;
14.3 AND & OR
SELECT * FROM produk
WHERE harga > 3000000 AND harga < 10000000;
14.4 OR Condition
SELECT * FROM produk
WHERE nama = 'Laptop' OR nama = 'Komputer';
15. ORDER BY dan LIMIT
15.1 ORDER BY
Digunakan untuk mengurutkan hasil query.
SELECT * FROM produk ORDER BY harga DESC;
15.2 LIMIT
SELECT * FROM produk LIMIT 5;
15.3 ORDER BY + LIMIT
SELECT * FROM produk ORDER BY harga DESC LIMIT 3;
16. LIKE dan BETWEEN
16.1 LIKE
Digunakan untuk pencarian teks.
SELECT * FROM produk WHERE nama LIKE '%lap%';
16.2 BETWEEN
SELECT * FROM produk WHERE harga BETWEEN 3000000 AND 8000000;
17. IN dan NOT IN
SELECT * FROM produk WHERE id IN (1, 3, 5);
SELECT * FROM produk WHERE id NOT IN (2, 4);
18. Alias (AS)
Alias digunakan untuk memberi nama sementara pada kolom atau tabel.
SELECT nama AS nama_produk, harga AS harga_produk FROM produk;
19. DISTINCT
Digunakan untuk mengambil data unik.
SELECT DISTINCT nama FROM produk;
20. Fungsi Agregat
| Fungsi | Deskripsi | Contoh |
|---|---|---|
| COUNT() | Menghitung jumlah data | COUNT(id) |
| SUM() | Menjumlahkan nilai | SUM(harga) |
| AVG() | Rata-rata | AVG(harga) |
| MAX() | Nilai terbesar | MAX(harga) |
| MIN() | Nilai terkecil | MIN(harga) |
21. GROUP BY dan HAVING
21.1 GROUP BY
SELECT kategori, COUNT(*) FROM produk GROUP BY kategori;
21.2 HAVING
SELECT kategori, COUNT(*) FROM produk
GROUP BY kategori
HAVING COUNT(*) > 3;
22. Praktik Terbaik Query MySQL
- Gunakan indeks untuk kolom yang sering di-query
- Hindari SELECT *
- Gunakan LIMIT pada data besar
- Pastikan struktur tabel optimal
Untuk memahami penggunaan database dalam aplikasi PHP, silakan baca kembali Dokumentasi PHP Lengkap.
23. JOIN dalam MySQL
JOIN digunakan untuk menggabungkan data dari dua atau lebih tabel berdasarkan relasi.
23.1 INNER JOIN
SELECT orders.id, users.nama
FROM orders
INNER JOIN users ON orders.user_id = users.id;
23.2 LEFT JOIN
SELECT users.nama, orders.id
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
23.3 RIGHT JOIN
SELECT users.nama, orders.id
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;
23.4 FULL JOIN (Simulasi)
MySQL tidak mendukung FULL JOIN secara langsung, tetapi dapat disimulasikan menggunakan UNION.
SELECT users.nama, orders.id
FROM users
LEFT JOIN orders ON users.id = orders.user_id
UNION
SELECT users.nama, orders.id
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;
24. Subquery
Subquery adalah query di dalam query lain.
24.1 Subquery di WHERE
SELECT nama FROM produk
WHERE harga > (SELECT AVG(harga) FROM produk);
24.2 Subquery di SELECT
SELECT nama,
(SELECT COUNT(*) FROM orders WHERE orders.user_id = users.id) AS total_order
FROM users;
25. Index dalam MySQL
Index digunakan untuk mempercepat proses pencarian data.
25.1 Membuat Index
CREATE INDEX idx_nama ON users(nama);
25.2 Menghapus Index
DROP INDEX idx_nama ON users;
26. View
View adalah tabel virtual yang dihasilkan dari query.
26.1 Membuat View
CREATE VIEW view_produk AS
SELECT nama, harga FROM produk WHERE harga > 5000000;
26.2 Menggunakan View
SELECT * FROM view_produk;
27. Transaction dalam MySQL
Transaction memastikan konsistensi data.
START TRANSACTION;
INSERT INTO orders (user_id, total) VALUES (1, 500000);
COMMIT;
28. Rollback
START TRANSACTION;
DELETE FROM orders WHERE id = 10;
ROLLBACK;
29. Optimasi Query MySQL
- Gunakan EXPLAIN
- Tambahkan index yang tepat
- Hindari query bersarang berlebihan
EXPLAIN SELECT * FROM produk WHERE harga > 5000000;
MySQL sangat erat kaitannya dengan backend PHP. Lihat kembali contoh integrasinya di Dokumentasi PHP Lengkap.
30. Stored Procedure
Stored Procedure adalah kumpulan perintah SQL yang disimpan di server dan dapat dipanggil berulang kali untuk meningkatkan efisiensi dan konsistensi logika.
30.1 Membuat Stored Procedure
DELIMITER //
CREATE PROCEDURE getAllUsers()
BEGIN
SELECT * FROM users;
END //
DELIMITER ;
30.2 Memanggil Stored Procedure
CALL getAllUsers();
30.3 Stored Procedure dengan Parameter
DELIMITER //
CREATE PROCEDURE getUserById(IN userId INT)
BEGIN
SELECT * FROM users WHERE id = userId;
END //
DELIMITER ;
CALL getUserById(1);
31. Function dalam MySQL
Function mirip dengan Stored Procedure, tetapi mengembalikan satu nilai.
31.1 Membuat Function
DELIMITER //
CREATE FUNCTION hitungDiskon(harga INT)
RETURNS INT
DETERMINISTIC
BEGIN
RETURN harga - (harga * 10 / 100);
END //
DELIMITER ;
31.2 Menggunakan Function
SELECT nama, hitungDiskon(harga) AS harga_diskon FROM produk;
32. Trigger
Trigger dijalankan otomatis saat terjadi event tertentu (INSERT, UPDATE, DELETE).
32.1 Membuat Trigger
DELIMITER //
CREATE TRIGGER before_insert_user
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.created_at = NOW();
END //
DELIMITER ;
32.2 Menghapus Trigger
DROP TRIGGER before_insert_user;
33. Event Scheduler
Event Scheduler memungkinkan eksekusi query secara terjadwal.
CREATE EVENT hapus_log_lama
ON SCHEDULE EVERY 1 DAY
DO
DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;
34. Backup Database MySQL
Backup sangat penting untuk mencegah kehilangan data.
34.1 Backup Menggunakan mysqldump
mysqldump -u root -p nama_database > backup.sql
34.2 Restore Database
mysql -u root -p nama_database < backup.sql
35. Keamanan MySQL (Security)
- Gunakan password kuat
- Batasi hak akses user
- Hindari penggunaan root di production
- Gunakan prepared statement di PHP
35.1 Mengatur Hak Akses User
GRANT SELECT, INSERT, UPDATE ON nama_database.*
TO 'user_app'@'localhost';
36. Best Practice MySQL
- Gunakan index secukupnya
- Gunakan tipe data yang tepat
- Normalisasi tabel
- Selalu lakukan backup berkala
37. Relasi MySQL dengan Bahasa Backend
MySQL sering digunakan bersama PHP, Node.js, dan Python. Pelajari lebih lanjut integrasi backend di:
38. Penutup
Dokumentasi MySQL ini mencakup dasar hingga lanjutan seperti JOIN, Subquery, Stored Procedure, Trigger, dan Security. Dengan pemahaman ini, Anda siap mengelola database secara profesional dan efisien untuk aplikasi web modern.
39. Study Case MySQL: Sistem Toko Online Sederhana
Studi kasus ini menunjukkan penerapan MySQL pada sistem toko online sederhana yang mencakup manajemen user, produk, dan transaksi.
39.1 Struktur Tabel
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE produk (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(150),
harga INT,
stok INT
);
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
total INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
39.2 Contoh Query Transaksi
INSERT INTO orders (user_id, total)
VALUES (1, 1500000);
39.3 Laporan Penjualan
SELECT users.nama, SUM(orders.total) AS total_belanja
FROM orders
INNER JOIN users ON orders.user_id = users.id
GROUP BY users.nama;
40. FAQ (Pertanyaan yang Sering Diajukan)
40.1 Apa itu MySQL?
MySQL adalah sistem manajemen database relasional (RDBMS) berbasis SQL yang banyak digunakan untuk aplikasi web.
40.2 Apa perbedaan MySQL dan MariaDB?
MariaDB adalah fork dari MySQL dengan pengembangan komunitas dan performa yang lebih terbuka, namun secara umum kompatibel.
40.3 Apakah MySQL cocok untuk aplikasi besar?
Ya. MySQL digunakan oleh banyak aplikasi berskala besar dengan optimasi, indexing, dan replikasi yang tepat.
40.4 Kapan harus menggunakan index?
Gunakan index pada kolom yang sering digunakan pada WHERE, JOIN, dan ORDER BY.
40.5 Apakah MySQL aman?
MySQL aman jika dikonfigurasi dengan benar, menggunakan user privilege, password kuat, dan prepared statement.