KelasIT.com
Database

Mengenal Database MySQL untuk Pemula

Pengenalan MySQL dari nol: instalasi, membuat database dan tabel, tipe data, perintah SQL dasar (INSERT, SELECT, UPDATE, DELETE), JOIN sederhana, serta kebiasaan aman saat bekerja dengan data.

Mengenal Database MySQL untuk Pemula

MySQL adalah sistem manajemen basis data relasional (RDBMS) open-source yang sangat banyak dipakai, mulai dari blog kecil hingga aplikasi skala besar. Data disimpan dalam tabel yang terdiri dari baris (record) dan kolom (field), dan diakses memakai bahasa SQL. Artikel ini membekalimu dengan dasar yang langsung bisa dipraktikkan.

Memasang MySQL

Pilih salah satu:

  • XAMPP / Laragon (Windows, macOS): paket siap pakai berisi MySQL/MariaDB.
  • Docker: docker run --name mysql -e MYSQL_ROOT_PASSWORD=rahasia -p 3306:3306 -d mysql:8
  • Paket sistem: sudo apt install mysql-server di Ubuntu.

Masuk lewat terminal:

mysql -u root -p

Untuk tampilan grafis, gunakan phpMyAdmin, DBeaver, atau TablePlus.

Membuat database dan tabel

CREATE DATABASE toko CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE toko;

CREATE TABLE produk (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nama VARCHAR(100) NOT NULL,
    harga DECIMAL(12,2) NOT NULL DEFAULT 0,
    stok INT NOT NULL DEFAULT 0,
    dibuat_pada TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Perhatikan:

  • utf8mb4 mendukung seluruh karakter Unicode termasuk emoji. Jangan pakai utf8 lama (hanya 3 byte).
  • PRIMARY KEY menjadi identitas unik tiap baris; AUTO_INCREMENT mengisinya otomatis.
  • NOT NULL melarang nilai kosong; DEFAULT memberi nilai bawaan.

Tipe data yang paling sering dipakai

KategoriTipeCatatan
Bilangan bulatINT, BIGINT, TINYINTTINYINT(1) sering dipakai sebagai boolean
DesimalDECIMAL(p,s)Wajib untuk uang. Jangan pakai FLOAT
Teks pendekVARCHAR(n)Batas n karakter
Teks panjangTEXT, LONGTEXTIsi artikel, deskripsi
Tanggal & waktuDATE, DATETIME, TIMESTAMPTIMESTAMP mengikuti zona waktu server
Pilihan tetapENUM('draft','terbit')Praktis, tetapi sulit diubah nanti
Data semi-terstrukturJSONUntuk data fleksibel

Empat operasi dasar

INSERT: menambah data

INSERT INTO produk (nama, harga, stok)
VALUES ('Pensil 2B', 2500, 100),
       ('Buku Tulis', 7000, 50);

SELECT: membaca data

SELECT * FROM produk;                          -- semua kolom
SELECT nama, harga FROM produk WHERE stok > 0; -- kolom tertentu dengan syarat
SELECT * FROM produk ORDER BY harga DESC LIMIT 5;

UPDATE: mengubah data

UPDATE produk SET harga = 3000 WHERE nama = 'Pensil 2B';

DELETE: menghapus data

DELETE FROM produk WHERE id = 2;
Aturan emas: selalu sertakan WHERE pada UPDATE dan DELETE. Tanpa WHERE, seluruh baris terpengaruh. Biasakan menjalankan SELECT dengan WHERE yang sama dulu untuk melihat baris apa yang akan terkena.

Operator dan fungsi yang berguna

SELECT * FROM produk WHERE harga BETWEEN 1000 AND 5000;
SELECT * FROM produk WHERE nama LIKE 'Pen%';       -- diawali "Pen"
SELECT * FROM produk WHERE id IN (1, 3, 5);
SELECT * FROM produk WHERE stok IS NULL;           -- gunakan IS NULL, bukan = NULL

Agregasi dan pengelompokan

SELECT COUNT(*) AS jumlah_produk, AVG(harga) AS rata_harga, SUM(stok) AS total_stok
FROM produk;

SELECT kategori, COUNT(*) AS jumlah
FROM produk
GROUP BY kategori
HAVING COUNT(*) > 3;

WHERE memfilter baris sebelum dikelompokkan, HAVING memfilter hasil kelompok.

Relasi antar tabel dan JOIN

Data yang baik dipecah ke beberapa tabel lalu dihubungkan. Contoh pesanan dan pelanggan:

SELECT p.id, pl.nama AS pelanggan, p.total
FROM pesanan p
INNER JOIN pelanggan pl ON pl.id = p.pelanggan_id;
  • INNER JOIN: hanya baris yang punya pasangan di kedua tabel.
  • LEFT JOIN: semua baris tabel kiri, meski tidak ada pasangannya (kolom kanan bernilai NULL).

Penjelasan lebih dalam tentang kunci yang menghubungkan tabel ada di artikel Memahami Primary Key dan Foreign Key.

Kebiasaan aman

  1. Backup rutin: mysqldump -u root -p toko > toko.sql, dan uji bahwa backup bisa dipulihkan.
  2. Jangan memakai akun root di aplikasi. Buat user khusus dengan hak akses secukupnya.
  3. Gunakan prepared statement (otomatis di Laravel/PDO) untuk mencegah SQL injection. Jangan menyambung string input pengguna ke dalam SQL.
  4. Gunakan transaksi untuk beberapa perubahan yang harus berhasil bersama (START TRANSACTION; ... COMMIT;).
  5. Beri nama konsisten: huruf kecil dengan underscore (tanggal_lahir).

Latihan mandiri

  1. Buat database sekolah dengan tabel siswa (id, nama, kelas, nilai).
  2. Isi 10 baris data.
  3. Tampilkan siswa dengan nilai di atas rata-rata (subquery: WHERE nilai > (SELECT AVG(nilai) FROM siswa)).
  4. Hitung jumlah siswa per kelas.
  5. Tambahkan tabel kelas lalu gabungkan dengan JOIN.

Contoh lengkap: toko kecil

Rancang tiga tabel: pelanggan, produk, dan pesanan.

CREATE TABLE pelanggan (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nama VARCHAR(100) NOT NULL,
    email VARCHAR(150) NOT NULL UNIQUE
);

CREATE TABLE pesanan (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    pelanggan_id INT UNSIGNED NOT NULL,
    produk_id INT UNSIGNED NOT NULL,
    jumlah INT NOT NULL,
    dibuat_pada TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (pelanggan_id) REFERENCES pelanggan(id),
    FOREIGN KEY (produk_id) REFERENCES produk(id)
);

Pertanyaan bisnis dan query-nya:

-- 1. Total belanja tiap pelanggan, dari yang terbesar
SELECT pl.nama, SUM(pr.harga * ps.jumlah) AS total_belanja
FROM pesanan ps
JOIN pelanggan pl ON pl.id = ps.pelanggan_id
JOIN produk pr ON pr.id = ps.produk_id
GROUP BY pl.id, pl.nama
ORDER BY total_belanja DESC;

-- 2. Produk yang belum pernah dibeli
SELECT pr.nama
FROM produk pr
LEFT JOIN pesanan ps ON ps.produk_id = pr.id
WHERE ps.id IS NULL;

-- 3. Produk dengan stok menipis
SELECT nama, stok FROM produk WHERE stok < 10 ORDER BY stok;

NULL: nilai "tidak diketahui"

NULL bukan nol dan bukan string kosong. Perbandingan biasa dengan NULL tidak pernah benar:

SELECT * FROM produk WHERE stok = NULL;      -- tidak menghasilkan apa pun
SELECT * FROM produk WHERE stok IS NULL;     -- benar

Fungsi COALESCE(kolom, 0) mengganti NULL dengan nilai lain saat menampilkan.

Kesalahan umum pemula

KesalahanAkibatSolusi
UPDATE/DELETE tanpa WHERESemua baris berubah/hilangTes dengan SELECT dulu, gunakan transaksi
Memakai FLOAT untuk uangPembulatan tak terdugaGunakan DECIMAL
Menyimpan banyak nilai dalam satu kolom ("1,2,3")Sulit dicari dan di-joinBuat tabel relasi
Tidak memakai utf8mb4Emoji dan karakter tertentu rusakAtur charset saat membuat database
Menyambung string SQL dengan input penggunaSQL injectionPrepared statement
Tidak membuat index pada kolom pencarianQuery lambat saat data besarLihat Index Database

Kesimpulan

Dasar MySQL terdiri dari membuat tabel dengan tipe data yang tepat, menguasai INSERT, SELECT, UPDATE, DELETE, memahami JOIN dan agregasi, serta disiplin pada keamanan dan backup. Fondasi ini dipakai di hampir semua aplikasi web yang kamu bangun nanti.

H
Hifzon

Menulis tentang pemrograman, database, AI, dan karier di dunia IT supaya belajar terasa lebih mudah dan menyenangkan.

Komentar (0)

Komentar hanya untuk member. Masuk atau daftar gratis untuk ikut berdiskusi.

Mau belajar lebih dalam?

Course online dengan latihan coding interaktif dan sertifikat.

Lihat Course →

Gabung komunitas

Tanya jawab, info event, dan teman belajar di grup WhatsApp.

Gabung Grup