Database untuk sekolah, kantor, bisnis, dan aplikasi web

MySQL dari Nol sampai Mahir

Pelajari MySQL secara bertahap: konsep database, desain tabel, tipe data, DDL, CRUD, filter, agregasi, JOIN, subquery, view, index, transaksi, user, keamanan, backup, restore, optimasi query, proyek nyata, simulator, dan 30 soal evaluasi interaktif.

MySQL Workbench β€” Akademiβ€” β–‘ Γ—
File   Edit   View   Query   Database   Server   Tools
SCHEMAS
akademik
siswa
kelas
nilai
SQL Editor

Rancang struktur dan jalankan query.

SELECT s.nama, k.nama_kelas, n.nilai
FROM siswa s
JOIN kelas k ON k.id=s.kelas_id
JOIN nilai n ON n.siswa_id=s.id
ORDER BY n.nilai DESC;
Bab 1 β€” Fondasi

Apa itu database dan MySQL?

Database adalah kumpulan data terstruktur. MySQL adalah sistem manajemen basis data relasional yang menggunakan SQL.

πŸ—„οΈ

Database

Wadah terorganisasi yang berisi tabel, relasi, view, index, dan objek lain.

πŸ“‹

Table

Struktur data berbentuk kolom dan baris. Contohnya tabel siswa, guru, kelas, produk, dan transaksi.

πŸ”‘

Key

Primary key mengidentifikasi record. Foreign key menghubungkan tabel.

🧾

SQL

Bahasa untuk membuat struktur, membaca data, mengubah data, dan mengatur akses.

Contoh dunia nyata

  • Sekolah: siswa, kelas, mata pelajaran, nilai.
  • Kantor: pegawai, divisi, absensi, gaji.
  • Toko: produk, pelanggan, pesanan, pembayaran.
  • Perpustakaan: buku, anggota, peminjaman.

Alur kerja

Rancang kebutuhan data.
Buat database dan tabel.
Masukkan data.
Ambil dan olah data dengan query.
Jaga keamanan dan lakukan backup.
Bab 2 β€” Persiapan

Server, client, koneksi, dan database awal

Komponen

MySQL Server menjalankan database. Client seperti MySQL Workbench atau terminal digunakan untuk mengirim query.

Data koneksi

Host, port, username, password, dan nama database harus tepat. Port default MySQL biasanya 3306.

Perintah dasar

SHOW DATABASES;
CREATE DATABASE akademik;
USE akademik;
SHOW TABLES;
Bab 3 β€” Desain Database

Entitas, atribut, relasi, dan normalisasi

Contoh rancangan akademik

TabelIsiKunci
siswaIdentitas siswaid
kelasDaftar kelasid
mata_pelajaranDaftar mapelid
nilaiNilai siswa per mapelid, siswa_id, mapel_id

Prinsip normalisasi

Satu kolom menyimpan satu jenis informasi.
Hindari data yang sama ditulis berulang.
Pisahkan data master dan transaksi.
Gunakan foreign key untuk hubungan.
Contoh salah: satu kolom berisi β€œMatematika: 80, Bahasa: 90”. Pisahkan ke tabel nilai agar dapat dicari, dihitung, dan dilaporkan.
Bab 4 β€” Tipe Data

Pilih tipe data yang tepat

TipeKegunaanContoh
INTBilangan bulat25
BIGINTBilangan bulat besarID transaksi
DECIMAL(10,2)Nilai desimal presisi150000.50
VARCHAR(100)Teks panjang terbatasNama siswa
TEXTTeks panjangCatatan
DATETanggal2026-07-25
DATETIMETanggal dan waktu2026-07-25 19:00:00
BOOLEANTrue/FalseTRUE
ENUMPilihan terbatas'aktif','nonaktif'
Bab 5 β€” DDL

Membuat dan mengubah struktur database

CREATE TABLE

CREATE TABLE kelas (
 id INT AUTO_INCREMENT PRIMARY KEY,
 nama_kelas VARCHAR(30) NOT NULL UNIQUE,
 wali_kelas VARCHAR(100),
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

ALTER TABLE

ALTER TABLE kelas
ADD COLUMN tingkat TINYINT NOT NULL;

ALTER TABLE kelas
MODIFY nama_kelas VARCHAR(50);

RENAME dan DROP

RENAME TABLE kelas TO rombel;

DROP TABLE rombel;

DESCRIBE

DESCRIBE kelas;
SHOW CREATE TABLE kelas;
Bab 6 β€” Constraint

Menjaga kualitas dan integritas data

PRIMARY KEY

Harus unik dan tidak NULL.

FOREIGN KEY

Menghubungkan tabel dan menjaga relasi.

UNIQUE

Mencegah nilai ganda seperti NIS atau email.

CHECK

Membatasi nilai sesuai aturan, misalnya nilai 0–100.

CREATE TABLE siswa (
 id INT AUTO_INCREMENT PRIMARY KEY,
 nis VARCHAR(20) NOT NULL UNIQUE,
 nama VARCHAR(100) NOT NULL,
 kelas_id INT NOT NULL,
 nilai_rata DECIMAL(5,2) CHECK (nilai_rata BETWEEN 0 AND 100),
 FOREIGN KEY (kelas_id) REFERENCES kelas(id)
  ON UPDATE CASCADE ON DELETE RESTRICT
);
Bab 7 β€” CRUD

Menambah, membaca, mengubah, dan menghapus data

Satu record

INSERT INTO kelas(nama_kelas,tingkat)
VALUES ('XI IPA 1',11);

Banyak record

INSERT INTO kelas(nama_kelas,tingkat) VALUES
('XI IPA 2',11),
('XI IPS 1',11),
('XII IPA 1',12);
SELECT * FROM siswa;

SELECT nis,nama
FROM siswa;
SELECT nama AS nama_siswa,
nilai_rata AS rata_rata
FROM siswa;
UPDATE siswa
SET nama='Alya Putri', nilai_rata=88.50
WHERE id=1;
Jangan menjalankan UPDATE tanpa WHERE kecuali memang ingin mengubah semua record.
DELETE FROM siswa
WHERE id=1;
DELETE menghapus baris. DROP menghapus tabel beserta strukturnya. TRUNCATE mengosongkan seluruh isi tabel.
Bab 8 β€” Query Dasar

Filter, pencarian, pengurutan, dan pembatasan hasil

WHERE

SELECT * FROM siswa
WHERE nilai_rata >= 75;

AND / OR

SELECT * FROM siswa
WHERE tingkat=11
AND nilai_rata >= 80;

LIKE

SELECT * FROM siswa
WHERE nama LIKE 'A%';

BETWEEN

SELECT * FROM siswa
WHERE nilai_rata BETWEEN 75 AND 90;

IN

SELECT * FROM kelas
WHERE tingkat IN (10,11);

ORDER BY & LIMIT

SELECT * FROM siswa
ORDER BY nilai_rata DESC
LIMIT 10;
Bab 9 β€” Fungsi SQL

Agregasi, teks, angka, dan tanggal

Agregasi

SELECT COUNT(*) jumlah,
AVG(nilai_rata) rata,
MIN(nilai_rata) terendah,
MAX(nilai_rata) tertinggi
FROM siswa;

Teks

SELECT UPPER(nama),
LOWER(nama),
LENGTH(nama),
CONCAT(nis,' - ',nama)
FROM siswa;

Tanggal

SELECT CURDATE(), NOW(),
YEAR(tanggal_lahir),
TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) umur
FROM siswa;
Bab 10 β€” GROUP BY

Meringkas dan mengelompokkan data

Rata-rata per kelas

SELECT kelas_id,
COUNT(*) jumlah_siswa,
AVG(nilai_rata) rata_kelas
FROM siswa
GROUP BY kelas_id;

HAVING

SELECT kelas_id, AVG(nilai_rata) rata
FROM siswa
GROUP BY kelas_id
HAVING AVG(nilai_rata) >= 80;
Bab 11 β€” JOIN

Menggabungkan beberapa tabel

INNER JOIN

SELECT s.nama,k.nama_kelas
FROM siswa s
INNER JOIN kelas k
ON k.id=s.kelas_id;

LEFT JOIN

SELECT k.nama_kelas,s.nama
FROM kelas k
LEFT JOIN siswa s
ON s.kelas_id=k.id;

Tiga tabel

SELECT s.nama,m.nama_mapel,n.nilai
FROM nilai n
JOIN siswa s ON s.id=n.siswa_id
JOIN mata_pelajaran m ON m.id=n.mapel_id;
Bab 12 β€” Query Lanjutan

Subquery, view, CTE, dan UNION

Subquery

SELECT nama,nilai_rata
FROM siswa
WHERE nilai_rata > (
 SELECT AVG(nilai_rata) FROM siswa
);

View

CREATE VIEW v_siswa_lulus AS
SELECT id,nama,nilai_rata
FROM siswa
WHERE nilai_rata >= 75;

CTE

WITH lulus AS (
 SELECT * FROM siswa WHERE nilai_rata >= 75
)
SELECT * FROM lulus ORDER BY nilai_rata DESC;

UNION

SELECT nama,'siswa' jenis FROM siswa
UNION
SELECT nama,'guru' jenis FROM guru;
Bab 13 β€” Index dan Optimasi

Mempercepat pencarian data

Membuat index

CREATE INDEX idx_siswa_nama
ON siswa(nama);

CREATE INDEX idx_nilai_kelas
ON siswa(kelas_id,nilai_rata);

EXPLAIN

EXPLAIN SELECT * FROM siswa
WHERE nama='Alya';

Gunakan EXPLAIN untuk melihat cara MySQL menjalankan query.

Terlalu banyak index memperlambat INSERT dan UPDATE. Buat index pada kolom yang sering dicari, diurutkan, atau dipakai JOIN.
Bab 14 β€” Transaksi

Menjaga perubahan data tetap konsisten

Transfer saldo

START TRANSACTION;

UPDATE rekening
SET saldo=saldo-100000
WHERE id=1;

UPDATE rekening
SET saldo=saldo+100000
WHERE id=2;

COMMIT;

ROLLBACK dan SAVEPOINT

START TRANSACTION;
SAVEPOINT sebelum_update;
UPDATE siswa SET nilai_rata=0;
ROLLBACK TO sebelum_update;
COMMIT;
Bab 15 β€” User dan Keamanan

Akun, hak akses, dan praktik aman

Create User

CREATE USER 'guru'@'localhost'
IDENTIFIED BY 'PasswordKuat!';

GRANT

GRANT SELECT,INSERT,UPDATE
ON akademik.*
TO 'guru'@'localhost';

REVOKE

REVOKE DELETE
ON akademik.*
FROM 'guru'@'localhost';
Praktik aman: gunakan prepared statements pada aplikasi, jangan memakai akun root untuk aplikasi, batasi hak akses, dan jangan menyimpan password dalam teks biasa.
Bab 16 β€” Backup dan Restore

Melindungi data dari kehilangan

Backup

mysqldump -u root -p akademik > akademik.sql

Simpan hasil backup di lokasi terpisah dan lakukan secara berkala.

Restore

mysql -u root -p akademik_baru < akademik.sql

Uji proses restore agar backup benar-benar dapat digunakan.

Bab 17 β€” Studi Kasus

Penerapan MySQL untuk sekolah dan kantor

Sekolah

Sistem Nilai

Tabel siswa, kelas, mata pelajaran, guru, dan nilai. Laporan: peringkat, ketuntasan, rata-rata per kelas.

Kantor

Presensi Pegawai

Tabel pegawai, divisi, jadwal, presensi, izin, dan lembur. Laporan: kehadiran dan rekap bulanan.

Bisnis

Penjualan

Tabel produk, pelanggan, pesanan, detail pesanan, pembayaran, dan stok.

Bab 18 β€” Proyek Praktik

Latihan dari dasar sampai HOTS

Dasar

Database Perpustakaan

Buat tabel buku, anggota, dan peminjaman. Tambahkan minimal 10 record.

Dasar

Database Kelas

Buat tabel siswa dan kelas, lalu tampilkan siswa berdasarkan kelas.

Menengah

Rekap Nilai

Hitung rata-rata, nilai tertinggi, terendah, dan jumlah siswa tuntas.

Menengah

Kasir

Buat tabel produk, transaksi, dan detail transaksi. Hitung total belanja.

Lanjutan

Presensi

Buat relasi pengguna, jadwal, dan kehadiran. Buat rekap per bulan.

HOTS

Analisis Query

Bandingkan query sebelum dan sesudah index menggunakan EXPLAIN.

Bab 19 β€” Kesalahan Umum

Bug dan kebiasaan yang harus dihindari

Kesalahan desain

  • Tidak memakai primary key.
  • Menyimpan banyak nilai dalam satu kolom.
  • Mengulang data master di tabel transaksi.
  • Memilih tipe data terlalu besar atau tidak tepat.

Kesalahan query

  • UPDATE atau DELETE tanpa WHERE.
  • SELECT * pada tabel sangat besar tanpa kebutuhan.
  • JOIN tanpa kondisi yang benar.
  • Tidak melakukan backup sebelum perubahan besar.
Bab 20 β€” Laboratorium SQL

Simulator pembuat query MySQL

Bab 21 β€” Evaluasi

Kuis MySQL 30 soal

Jawab seluruh soal. Nilai minimal 75%.