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
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
CREATE DATABASE akademik;
USE akademik;
SHOW TABLES;
Entitas, atribut, relasi, dan normalisasi
Contoh rancangan akademik
| Tabel | Isi | Kunci |
|---|---|---|
| siswa | Identitas siswa | id |
| kelas | Daftar kelas | id |
| mata_pelajaran | Daftar mapel | id |
| nilai | Nilai siswa per mapel | id, siswa_id, mapel_id |
Prinsip normalisasi
Pilih tipe data yang tepat
| Tipe | Kegunaan | Contoh |
|---|---|---|
| INT | Bilangan bulat | 25 |
| BIGINT | Bilangan bulat besar | ID transaksi |
| DECIMAL(10,2) | Nilai desimal presisi | 150000.50 |
| VARCHAR(100) | Teks panjang terbatas | Nama siswa |
| TEXT | Teks panjang | Catatan |
| DATE | Tanggal | 2026-07-25 |
| DATETIME | Tanggal dan waktu | 2026-07-25 19:00:00 |
| BOOLEAN | True/False | TRUE |
| ENUM | Pilihan terbatas | 'aktif','nonaktif' |
Membuat dan mengubah struktur database
CREATE TABLE
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
ADD COLUMN tingkat TINYINT NOT NULL;
ALTER TABLE kelas
MODIFY nama_kelas VARCHAR(50);
RENAME dan DROP
DROP TABLE rombel;
DESCRIBE
SHOW CREATE TABLE kelas;
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.
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
);
Menambah, membaca, mengubah, dan menghapus data
Satu record
VALUES ('XI IPA 1',11);
Banyak record
('XI IPA 2',11),
('XI IPS 1',11),
('XII IPA 1',12);
SELECT nis,nama
FROM siswa;
nilai_rata AS rata_rata
FROM siswa;
SET nama='Alya Putri', nilai_rata=88.50
WHERE id=1;
WHERE id=1;
Filter, pencarian, pengurutan, dan pembatasan hasil
WHERE
WHERE nilai_rata >= 75;
AND / OR
WHERE tingkat=11
AND nilai_rata >= 80;
LIKE
WHERE nama LIKE 'A%';
BETWEEN
WHERE nilai_rata BETWEEN 75 AND 90;
IN
WHERE tingkat IN (10,11);
ORDER BY & LIMIT
ORDER BY nilai_rata DESC
LIMIT 10;
Agregasi, teks, angka, dan tanggal
Agregasi
AVG(nilai_rata) rata,
MIN(nilai_rata) terendah,
MAX(nilai_rata) tertinggi
FROM siswa;
Teks
LOWER(nama),
LENGTH(nama),
CONCAT(nis,' - ',nama)
FROM siswa;
Tanggal
YEAR(tanggal_lahir),
TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) umur
FROM siswa;
Meringkas dan mengelompokkan data
Rata-rata per kelas
COUNT(*) jumlah_siswa,
AVG(nilai_rata) rata_kelas
FROM siswa
GROUP BY kelas_id;
HAVING
FROM siswa
GROUP BY kelas_id
HAVING AVG(nilai_rata) >= 80;
Menggabungkan beberapa tabel
INNER JOIN
FROM siswa s
INNER JOIN kelas k
ON k.id=s.kelas_id;
LEFT JOIN
FROM kelas k
LEFT JOIN siswa s
ON s.kelas_id=k.id;
Tiga tabel
FROM nilai n
JOIN siswa s ON s.id=n.siswa_id
JOIN mata_pelajaran m ON m.id=n.mapel_id;
Subquery, view, CTE, dan UNION
Subquery
FROM siswa
WHERE nilai_rata > (
SELECT AVG(nilai_rata) FROM siswa
);
View
SELECT id,nama,nilai_rata
FROM siswa
WHERE nilai_rata >= 75;
CTE
SELECT * FROM siswa WHERE nilai_rata >= 75
)
SELECT * FROM lulus ORDER BY nilai_rata DESC;
UNION
UNION
SELECT nama,'guru' jenis FROM guru;
Mempercepat pencarian data
Membuat index
ON siswa(nama);
CREATE INDEX idx_nilai_kelas
ON siswa(kelas_id,nilai_rata);
EXPLAIN
WHERE nama='Alya';
Gunakan EXPLAIN untuk melihat cara MySQL menjalankan query.
Menjaga perubahan data tetap konsisten
Transfer saldo
UPDATE rekening
SET saldo=saldo-100000
WHERE id=1;
UPDATE rekening
SET saldo=saldo+100000
WHERE id=2;
COMMIT;
ROLLBACK dan SAVEPOINT
SAVEPOINT sebelum_update;
UPDATE siswa SET nilai_rata=0;
ROLLBACK TO sebelum_update;
COMMIT;
Akun, hak akses, dan praktik aman
Create User
IDENTIFIED BY 'PasswordKuat!';
GRANT
ON akademik.*
TO 'guru'@'localhost';
REVOKE
ON akademik.*
FROM 'guru'@'localhost';
Melindungi data dari kehilangan
Backup
Simpan hasil backup di lokasi terpisah dan lakukan secara berkala.
Restore
Uji proses restore agar backup benar-benar dapat digunakan.
Penerapan MySQL untuk sekolah dan kantor
Sistem Nilai
Tabel siswa, kelas, mata pelajaran, guru, dan nilai. Laporan: peringkat, ketuntasan, rata-rata per kelas.
Presensi Pegawai
Tabel pegawai, divisi, jadwal, presensi, izin, dan lembur. Laporan: kehadiran dan rekap bulanan.
Penjualan
Tabel produk, pelanggan, pesanan, detail pesanan, pembayaran, dan stok.
Latihan dari dasar sampai HOTS
Database Perpustakaan
Buat tabel buku, anggota, dan peminjaman. Tambahkan minimal 10 record.
Database Kelas
Buat tabel siswa dan kelas, lalu tampilkan siswa berdasarkan kelas.
Rekap Nilai
Hitung rata-rata, nilai tertinggi, terendah, dan jumlah siswa tuntas.
Kasir
Buat tabel produk, transaksi, dan detail transaksi. Hitung total belanja.
Presensi
Buat relasi pengguna, jadwal, dan kehadiran. Buat rekap per bulan.
Analisis Query
Bandingkan query sebelum dan sesudah index menggunakan EXPLAIN.
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.
Simulator pembuat query MySQL
Kuis MySQL 30 soal
Jawab seluruh soal. Nilai minimal 75%.