🧩 Pertemuan 2 β€” Pengenalan Database, SQL, Tipe Data & Constraint MySQL

🎯 Tujuan Pembelajaran

Setelah pertemuan ini, kamu diharapkan mampu:

  • Memahami konsep database, DBMS, dan RDBMS.
  • Mengenal kategori perintah SQL: DDL, DML, DCL, TCL.
  • Membuat database dan tabel di MySQL.
  • Memilih tipe data yang tepat untuk setiap kolom.
  • Menerapkan berbagai constraint untuk menjaga integritas data.

πŸ“˜ 1. Konsep Dasar Database

Database adalah kumpulan data yang tersimpan secara terstruktur agar mudah diakses, dikelola, dan diperbarui. Contoh: data mahasiswa, data transaksi, data produk.

DBMS (Database Management System) adalah perangkat lunak yang mengelola database. Contoh: Microsoft Access.

RDBMS (Relational Database Management System) adalah DBMS yang menyimpan data dalam bentuk tabel-tabel yang saling berelasi. Contoh: MySQL, PostgreSQL, Oracle, Microsoft SQL Server.

Pada course ini kita menggunakan MySQL β€” RDBMS yang paling populer, open-source, dan gratis.


πŸ“˜ 2. Kategori Perintah SQL

Kategori Kepanjangan Fungsi Contoh Perintah
DDL Data Definition Language Mendefinisikan struktur database CREATE, ALTER, DROP, TRUNCATE
DML Data Manipulation Language Memanipulasi isi data SELECT, INSERT, UPDATE, DELETE
DCL Data Control Language Mengatur hak akses user GRANT, REVOKE
TCL Transaction Control Language Mengatur transaksi COMMIT, ROLLBACK, SAVEPOINT

πŸ“˜ 3. Tipe Data di MySQL

Numerik

Tipe Data Ukuran Range Keterangan
TINYINT 1 byte -128 s/d 127 Angka sangat kecil
INT 4 byte -2 miliar s/d 2 miliar Angka umum
BIGINT 8 byte Sangat besar ID unik, data besar
DECIMAL(p,s) Variabel Presisi tinggi Harga, nilai uang
FLOAT 4 byte Approx Nilai desimal biasa

Teks

Tipe Data Keterangan
CHAR(n) Panjang tetap, cocok untuk kode/kode pos
VARCHAR(n) Panjang variabel, paling umum digunakan
TEXT Teks panjang (artikel, deskripsi)
ENUM('a','b') Nilai dari pilihan tertentu

Tanggal & Waktu

Tipe Data Format Keterangan
DATE YYYY-MM-DD Hanya tanggal
DATETIME YYYY-MM-DD HH:MM:SS Tanggal dan waktu
TIMESTAMP YYYY-MM-DD HH:MM:SS Auto-update waktu
YEAR YYYY Hanya tahun

πŸ’‘ Tips: Gunakan DECIMAL untuk nilai uang (bukan FLOAT), karena FLOAT bisa menyebabkan ketidaktepatan desimal.


πŸ“˜ 4. Constraint (Aturan Data)

Constraint adalah aturan yang diterapkan pada kolom untuk menjaga kualitas dan konsistensi data.

Constraint Fungsi Contoh
PRIMARY KEY Pengenal unik setiap baris id_mahasiswa
FOREIGN KEY Menghubungkan dua tabel id_jurusan merujuk ke tabel jurusan
UNIQUE Nilai tidak boleh duplikat email, nomor_ktp
NOT NULL Kolom tidak boleh kosong nama
DEFAULT Nilai otomatis jika tidak diisi status DEFAULT 'aktif'
CHECK Membatasi nilai berdasarkan kondisi usia >= 17
AUTO_INCREMENT Nilai angka otomatis bertambah Kolom ID

πŸ§‘β€πŸ’» LATIHAN 1 β€” Setup MySQL & Database Pertama

Langkah 1: Persiapan

Pastikan MySQL sudah terinstall. Untuk mengakses MySQL lewat terminal:

1
mysql -u root -p

Langkah 2: Buat Database

1
2
3
4
5
6
7
8
9
10
11
-- Membuat database baru
CREATE DATABASE db_kampus;

-- Memilih database yang akan digunakan
USE db_kampus;

-- Melihat semua database yang ada
SHOW DATABASES;

-- Melihat database yang sedang aktif
SELECT DATABASE();

Langkah 3: Buat Tabel Pertama

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- Membuat tabel jurusan
CREATE TABLE jurusan (
id_jurusan INT AUTO_INCREMENT PRIMARY KEY,
kode_jur CHAR(5) NOT NULL UNIQUE,
nama_jur VARCHAR(100) NOT NULL,
fakultas VARCHAR(100) NOT NULL
);

-- Membuat tabel mahasiswa dengan relasi ke jurusan
CREATE TABLE mahasiswa (
id_mhs INT AUTO_INCREMENT PRIMARY KEY,
nim VARCHAR(15) NOT NULL UNIQUE,
nama VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
tanggal_lahir DATE,
ipk DECIMAL(3,2) DEFAULT 0.00,
status ENUM('aktif','cuti','lulus','dropout') DEFAULT 'aktif',
tgl_daftar DATETIME DEFAULT NOW(),
id_jurusan INT,
FOREIGN KEY (id_jurusan) REFERENCES jurusan(id_jurusan)
);

Langkah 4: Isi Data

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- Isi tabel jurusan
INSERT INTO jurusan (kode_jur, nama_jur, fakultas) VALUES
('IF001', 'Informatika', 'Fakultas Ilmu Komputer'),
('SI001', 'Sistem Informasi', 'Fakultas Ilmu Komputer'),
('TI001', 'Teknik Industri', 'Fakultas Teknik'),
('MN001', 'Manajemen', 'Fakultas Ekonomi');

-- Isi tabel mahasiswa
INSERT INTO mahasiswa (nim, nama, email, tanggal_lahir, ipk, id_jurusan) VALUES
('2401001', 'Andi Pratama', '[email protected]', '2004-03-15', 3.75, 1),
('2401002', 'Budi Santoso', '[email protected]', '2004-07-22', 3.20, 1),
('2401003', 'Citra Dewi', '[email protected]', '2005-01-10', 3.85, 2),
('2401004', 'Deni Hermawan', '[email protected]', '2003-11-05', 2.95, 3),
('2401005', 'Eka Putri', '[email protected]', '2004-09-28', 3.50, 4);

Langkah 5: Tampilkan Data

1
2
3
4
5
6
7
-- Tampilkan semua data
SELECT * FROM jurusan;
SELECT * FROM mahasiswa;

-- Lihat struktur tabel
DESCRIBE mahasiswa;
SHOW CREATE TABLE mahasiswa;

πŸ§‘β€πŸ’» LATIHAN 2 β€” Mengubah Struktur Tabel (ALTER TABLE)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- Menambahkan kolom baru
ALTER TABLE mahasiswa
ADD COLUMN nomor_telepon VARCHAR(15) AFTER email;

-- Mengubah tipe data kolom
ALTER TABLE mahasiswa
MODIFY COLUMN nama VARCHAR(150) NOT NULL;

-- Mengubah nama kolom sekaligus tipe datanya
ALTER TABLE mahasiswa
CHANGE COLUMN nomor_telepon no_telp VARCHAR(15);

-- Menghapus kolom
ALTER TABLE mahasiswa
DROP COLUMN no_telp;

-- Menambahkan constraint baru setelah tabel dibuat
ALTER TABLE mahasiswa
ADD CONSTRAINT chk_ipk CHECK (ipk >= 0.00 AND ipk <= 4.00);

-- Menambahkan kolom dengan DEFAULT
ALTER TABLE mahasiswa
ADD COLUMN is_beasiswa BOOLEAN DEFAULT FALSE;

Verifikasi perubahan:

1
DESCRIBE mahasiswa;

πŸ§‘β€πŸ’» LATIHAN 3 β€” Uji Coba Constraint

Coba jalankan query-query berikut dan amati hasilnya:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- 1. Coba INSERT duplikat NIM (harusnya ERROR)
INSERT INTO mahasiswa (nim, nama, id_jurusan)
VALUES ('2401001', 'Mahasiswa Duplikat', 1);

-- 2. Coba INSERT tanpa mengisi kolom NOT NULL (harusnya ERROR)
INSERT INTO mahasiswa (nim) VALUES ('2401099');

-- 3. Coba INSERT id_jurusan yang tidak ada di tabel jurusan (harusnya ERROR)
INSERT INTO mahasiswa (nim, nama, id_jurusan)
VALUES ('2401010', 'Test FK', 99);

-- 4. Coba INSERT IPK lebih dari 4.00 (harusnya ERROR setelah constraint CHECK ditambahkan)
INSERT INTO mahasiswa (nim, nama, ipk, id_jurusan)
VALUES ('2401011', 'Test IPK', 5.00, 1);

-- 5. INSERT tanpa mengisi kolom DEFAULT (harusnya berhasil, nilai default terisi)
INSERT INTO mahasiswa (nim, nama, id_jurusan)
VALUES ('2401012', 'Mahasiswa Default', 1);
SELECT * FROM mahasiswa WHERE nim = '2401012';

Catat setiap error yang muncul dan jelaskan mengapa error tersebut terjadi!


πŸ§‘β€πŸ’» LATIHAN 4 β€” Studi Kasus: Database Toko

Buat database toko online dari awal dengan ketentuan berikut:

Tabel yang diperlukan:

  1. kategori β€” menyimpan kategori produk

    • id_kategori, nama_kategori, deskripsi
  2. produk β€” menyimpan data produk

    • id_produk, kode_produk (UNIQUE), nama_produk, harga (DECIMAL, tidak boleh negatif), stok (DEFAULT 0), id_kategori (FK)
  3. pelanggan β€” menyimpan data pelanggan

    • id_pelanggan, nama, email (UNIQUE), telepon, alamat, tgl_daftar (DEFAULT NOW())
  4. pesanan β€” menyimpan header pesanan

    • id_pesanan, id_pelanggan (FK), tgl_pesanan (DEFAULT NOW()), total_harga, status (ENUM: β€˜pending’,’dibayar’,’dikirim’,’selesai’,’dibatalkan’)
  5. detail_pesanan β€” item dalam setiap pesanan

    • id_detail, id_pesanan (FK), id_produk (FK), jumlah, harga_satuan

Ketentuan:

1
2
3
4
5
6
-- Tulis script SQL lengkap untuk:
-- 1. CREATE DATABASE db_toko
-- 2. CREATE TABLE untuk semua tabel di atas dengan constraint yang sesuai
-- 3. INSERT minimal 5 data untuk setiap tabel
-- 4. SELECT semua isi tabel
-- 5. Jalankan minimal 3 percobaan yang melanggar constraint dan catat errornya

πŸ§‘β€πŸ’» LATIHAN 5 β€” Tipe Data dalam Praktik

Untuk setiap skenario berikut, tentukan tipe data yang paling tepat dan jelaskan alasannya:

No Kolom Nilai Contoh Tipe Data Yang Tepat Alasan
1 Harga produk 299000.50 … …
2 Kode pos β€œ12345” … …
3 Deskripsi produk panjang β€œLaptop gaming dengan…” … …
4 Status aktif true/false … …
5 Tahun lahir 2004 … …
6 Nomor KTP β€œ3201234567890001” … …
7 Rating produk (1-5) 4 … …
8 Gaji karyawan 8500000.00 … …
9 Waktu login terakhir 2026-06-11 08:30:00 … …
10 Gender β€œLaki-laki”/β€œPerempuan” … …

Setelah menentukan tipe data, buat tabel profil_karyawan yang menggunakan semua tipe data di atas!


πŸ§‘β€πŸ’» LATIHAN 6 β€” DROP dan TRUNCATE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- Buat tabel percobaan
CREATE TABLE tbl_percobaan (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(50)
);

INSERT INTO tbl_percobaan (nama) VALUES ('Data 1'), ('Data 2'), ('Data 3');

-- TRUNCATE: hapus semua data, tapi struktur tabel tetap ada
-- Auto Increment direset ke 1
TRUNCATE TABLE tbl_percobaan;
SELECT * FROM tbl_percobaan; -- Harusnya kosong

-- Coba INSERT lagi setelah TRUNCATE
INSERT INTO tbl_percobaan (nama) VALUES ('Data Baru');
SELECT * FROM tbl_percobaan; -- ID mulai dari 1 lagi

-- DROP: hapus tabel beserta semua datanya
DROP TABLE tbl_percobaan;
-- SHOW TABLES; -- Tabel sudah tidak ada

Pertanyaan: Apa perbedaan antara DELETE, TRUNCATE, dan DROP? Kapan menggunakan masing-masing?


🧩 TUGAS PERORANGAN

Estimasi waktu: Β±1,5 jam

Buat database dengan nama db_<NamaKamu> (contoh: db_Andi) yang berisi:

  1. Minimal 3 tabel yang saling berelasi dengan FOREIGN KEY
  2. Terapkan semua jenis constraint berikut: PRIMARY KEY, UNIQUE, NOT NULL, DEFAULT, CHECK, AUTO_INCREMENT
  3. Gunakan minimal 5 tipe data berbeda
  4. Masukkan minimal 8 data per tabel
  5. Jalankan SELECT * FROM setiap tabel
  6. Coba langgar setiap constraint dan screenshot/catat error yang muncul

Tema bebas β€” boleh sistem sekolah, apotek, bioskop, restoran, dll.

πŸ’Ύ Kumpulkan dengan nama: Pertemuan2_Nama.sql


πŸ” Refleksi

  1. Apa perbedaan antara PRIMARY KEY dan UNIQUE? Bisakah sebuah tabel punya dua PRIMARY KEY?
  2. Mengapa DECIMAL lebih baik dari FLOAT untuk menyimpan nilai uang?
  3. Apa yang terjadi jika kamu melakukan DELETE data yang dirujuk oleh FOREIGN KEY?
  4. Kapan kamu menggunakan VARCHAR vs CHAR?