Dokumentasi MySQL Lengkap: Dasar, Query, JOIN, Index & Studi Kasus

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.

Rekomendasi Bacaan Terkait

Leave a Comment