Target Pertemuan
Di akhir kelas, mahasiswa mampu memahami empat operasi fundamental terhadap data, menerapkannya melalui perintah SQL, dan menjelaskan batasan penghapusan data yang masih direferensikan.
Menambah data baru dan menampilkan data sesuai kriteria, termasuk pembacaan lintas tabel.
Mengubah dan menghapus data secara terkendali dengan memperhatikan kunci asing.
Memetakan operasi CRUD terhadap seluruh data sistem sebagai bekal Blueprint V1 (P7).
Setiap perintah yang mengubah data wajib diprediksi terlebih dahulu sebelum dijalankan.
Pertanyaan Pembuka
Seorang pelanggan laundry meminta alamatnya diganti, dan kasir juga ingin menghapus satu pelanggan yang pernah tercatat ganda. Operasi manakah yang tepat untuk masing-masing kebutuhan tersebut? Apa yang perlu diperiksa sebelum data pelanggan dihapus? Tuliskan analisis di kertas sebelum membuka laptop.
1. Dari Relasi ke Operasi Data
Pertemuan 5 menghasilkan struktur tabel dengan kunci utama dan kunci asing yang sudah berfungsi. Tahap berikutnya adalah mengelola isi tabel tersebut secara benar. Setiap operasi yang dilakukan pada data harus mempertimbangkan relasi yang sudah dibangun.
P5
P6 hari ini
P7
2. Empat Operasi Fundamental
CRUD merupakan pemetaan empat operasi dasar terhadap data ke dalam perintah SQL. Pemetaan ini menjadi dasar untuk menyusun CRUD Matrix pada project semester.
| Operasi | Makna | Perintah SQL | Contoh pada data mahasiswa |
|---|---|---|---|
| Create | Menambah baris baru | INSERT | Mahasiswa baru mendaftar |
| Read | Menampilkan data | SELECT | Melihat daftar mahasiswa |
| Update | Mengubah isi baris | UPDATE | Mahasiswa pindah alamat |
| Delete | Menghapus baris | DELETE | Data mahasiswa dihapus |
3. Create — Menambah Data
Ketentuan Create
- Setiap kolom NOT NULL wajib diisi nilainya.
- Kolom AUTO_INCREMENT tidak perlu diisi secara manual.
- Nilai kunci asing wajib merujuk pada baris yang tersedia pada tabel induk.
Contoh
Pelanggan baru dapat ditambahkan langsung ke tabel pelanggan. Penambahan penjualan memerlukan id_pelanggan yang sudah ada pada tabel pelanggan.
Create pada tabel induk dilakukan terlebih dahulu sebelum create pada tabel anak.
4. Read — Menampilkan Data
Perintah SELECT menampilkan data sesuai kolom dan syarat yang ditentukan. Klausa WHERE membatasi baris, ORDER BY mengurutkan hasil, dan LIMIT membatasi jumlah baris yang ditampilkan.
Read satu tabel
Menampilkan data dari satu tabel, misalnya daftar pelanggan yang namanya diawali huruf tertentu.
Read lintas tabel (JOIN)
Menggabungkan beberapa tabel melalui kunci asing sehingga data terkait dapat dibaca sebagai satu kesatuan, misalnya nota beserta nama pelanggannya.
5. Update — Mengubah Data
Perintah UPDATE mengubah isi baris yang sudah ada. Klausa WHERE menentukan baris yang diubah. Tanpa WHERE, seluruh baris pada tabel akan berubah.
Perubahan pada kunci asing harus tetap merujuk pada baris induk yang tersedia. Perubahan yang melanggar ketentuan tersebut ditolak oleh sistem database sebagaimana pada Pertemuan 5.
6. Delete — Menghapus Data dan Batasannya
Perintah DELETE menghapus baris dari tabel. Pada tabel yang memiliki relasi, penghapusan baris induk yang masih direferensikan oleh tabel anak ditolak oleh sistem database.
Boleh dihapus
- Data uji atau data yang salah input dan belum direferensikan.
- Baris pada tabel anak yang sudah tidak dibutuhkan (misalnya detail yang keliru).
Tidak boleh dihapus langsung
- Riwayat transaksi dan pembayaran yang menjadi bukti keuangan.
- Data induk yang masih memiliki baris terkait pada tabel anak.
Alternatif yang umum adalah soft delete dengan kolom status aktif.
7. Empat Operasi pada Berbagai Jenis Usaha
Operasi CRUD berlaku sama pada berbagai jenis usaha. Pemetaan berikut menunjukkan bagaimana empat operasi tersebut muncul pada contoh yang berbeda:
| Operasi | Laundry | Kampus | Booking Lapangan | Perpustakaan | Bengkel |
|---|---|---|---|---|---|
| Create | Pelanggan baru mendaftar | Mahasiswa baru mendaftar | Pelanggan baru membuat akun | Anggota baru terdaftar | Kendaraan baru masuk bengkel |
| Read | Melihat riwayat cucian | Melihat jadwal kuliah | Melihat jadwal lapangan kosong | Melihat daftar buku dipinjam | Melihat riwayat servis |
| Update | Pelanggan pindah alamat | Mahasiswa pindah jurusan | Booking dijadwal ulang | Status buku diperbarui | Estimasi servis diubah |
| Delete | Pelanggan ganda dihapus | Data mahasiswa salah input dihapus | Booking dibatalkan | Anggota nonaktif (soft delete) | Data servis keliru dihapus |
8. Praktik — Operasi CRUD pada penjualan_db
Praktik ini dimulai dengan membangun ulang database penjualan_db dari awal. Langkah ini menghasilkan database dan data yang identik di setiap komputer, sehingga mahasiswa yang berpindah perangkat tetap dapat mengikuti praktik tanpa bergantung pada Pertemuan 5. Database laundry_db dari Pertemuan 4 tidak digunakan.
Siapkan di XAMPP
- Buka XAMPP Control Panel, pastikan Apache dan MySQL berjalan.
- Buka http://localhost/phpmyadmin, lalu buka tab SQL. Tidak perlu memilih database terlebih dahulu karena blok pertama akan membuatnya.
- Tempelkan blok kode sesuai urutan, kemudian klik Go/Kirim. Jalankan Mini coding 0 terlebih dahulu, lalu blok berikutnya satu per satu.
-- Hapus database lama (jika ada), lalu buat ulang dari awal.
DROP DATABASE IF EXISTS penjualan_db;
CREATE DATABASE penjualan_db
CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE penjualan_db;
-- 1. Pelanggan (tabel induk)
CREATE TABLE pelanggan (
id_pelanggan INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
no_hp VARCHAR(20),
alamat TEXT
) ENGINE=InnoDB;
-- 2. Produk (tabel induk)
CREATE TABLE produk (
id_produk INT AUTO_INCREMENT PRIMARY KEY,
nama_produk VARCHAR(100) NOT NULL,
harga INT NOT NULL,
stok INT NOT NULL DEFAULT 0
) ENGINE=InnoDB;
-- 3. Penjualan (tabel anak dari pelanggan)
CREATE TABLE penjualan (
id_penjualan INT AUTO_INCREMENT PRIMARY KEY,
id_pelanggan INT NOT NULL,
tanggal DATE NOT NULL,
total INT NOT NULL DEFAULT 0,
CONSTRAINT fk_jual_pelanggan
FOREIGN KEY (id_pelanggan) REFERENCES pelanggan (id_pelanggan)
) ENGINE=InnoDB;
-- 4. Detail penjualan (tabel perantara N:M antara penjualan dan produk)
CREATE TABLE detail_penjualan (
id_detail INT AUTO_INCREMENT PRIMARY KEY,
id_penjualan INT NOT NULL,
id_produk INT NOT NULL,
jumlah INT NOT NULL,
subtotal INT NOT NULL,
CONSTRAINT fk_detail_jual
FOREIGN KEY (id_penjualan) REFERENCES penjualan (id_penjualan),
CONSTRAINT fk_detail_produk
FOREIGN KEY (id_produk) REFERENCES produk (id_produk)
) ENGINE=InnoDB;
-- 5. Pembayaran (tabel anak dari penjualan)
CREATE TABLE pembayaran (
id_pembayaran INT AUTO_INCREMENT PRIMARY KEY,
id_penjualan INT NOT NULL,
tanggal_bayar DATETIME DEFAULT CURRENT_TIMESTAMP,
jumlah_bayar INT NOT NULL,
metode ENUM('tunai','transfer','qris') NOT NULL DEFAULT 'tunai',
CONSTRAINT fk_bayar_jual
FOREIGN KEY (id_penjualan) REFERENCES penjualan (id_penjualan)
) ENGINE=InnoDB;
-- Data contoh awal: 2 pelanggan, 3 produk, dan 1 penjualan lengkap.
INSERT INTO pelanggan (nama, no_hp, alamat) VALUES
('Andi', '081234567890', 'Jl. Merpati No. 10'),
('Sinta', '082133344455', 'Jl. Anggrek No. 8');
INSERT INTO produk (nama_produk, harga, stok) VALUES
('Buku Tulis', 12000, 50),
('Pulpen', 5000, 100),
('Tas Ransel', 150000, 10);
INSERT INTO penjualan (id_pelanggan, tanggal, total)
VALUES (1, '2026-10-01', 17000);
INSERT INTO detail_penjualan (id_penjualan, id_produk, jumlah, subtotal) VALUES
(1, 1, 1, 12000),
(1, 2, 1, 5000);
INSERT INTO pembayaran (id_penjualan, jumlah_bayar, metode)
VALUES (1, 17000, 'tunai');
USE penjualan_db;
-- Pastikan lima tabel dari Pertemuan 5 tersedia.
SHOW TABLES;
-- Setelah Mini coding 0, jumlah pelanggan seharusnya 2 dan jumlah penjualan 1.
SELECT COUNT(*) AS jumlah_pelanggan FROM pelanggan;
SELECT COUNT(*) AS jumlah_penjualan FROM penjualan;
USE penjualan_db;
-- C: Create — menambah pelanggan baru. Kolom AUTO_INCREMENT tidak diisi.
INSERT INTO pelanggan (nama, no_hp, alamat)
VALUES ('Dewi Lestari', '081300000001', 'Jl. Melati No. 3');
-- C: Create — menambah produk baru.
INSERT INTO produk (nama_produk, harga, stok)
VALUES ('Penghapus', 3000, 40);
-- C: Uji penolakan — pelanggan dengan id 9999 tidak tersedia.
-- Prediksi terlebih dahulu: galat 1452 WAJIB muncul.
INSERT INTO penjualan (id_pelanggan, tanggal, total)
VALUES (9999, '2026-10-05', 3000);
USE penjualan_db;
-- R: Read — pelanggan yang namanya diawali huruf D.
SELECT id_pelanggan, nama, no_hp
FROM pelanggan
WHERE nama LIKE 'D%'
ORDER BY nama;
-- R: Read lintas tabel — lima penjualan terbaru beserta nama pelanggannya.
SELECT p.nama AS pelanggan, j.id_penjualan, j.tanggal, j.total
FROM penjualan AS j
JOIN pelanggan AS p ON p.id_pelanggan = j.id_pelanggan
ORDER BY j.tanggal DESC, j.id_penjualan DESC
LIMIT 5;
USE penjualan_db;
-- U: Update — pelanggan pindah alamat. WHERE membatasi perubahan pada satu baris.
UPDATE pelanggan
SET alamat = 'Jl. Kenanga No. 21'
WHERE nama = 'Dewi Lestari';
-- U: Update — harga produk diperbarui.
UPDATE produk
SET harga = 13000
WHERE nama_produk = 'Buku Tulis';
-- U: Uji penolakan — penjualan dialihkan ke pelanggan yang tidak tersedia.
-- Prediksi terlebih dahulu: galat 1452 WAJIB muncul.
UPDATE penjualan
SET id_pelanggan = 9999
WHERE id_penjualan = 1;
-- D: Uji penolakan — pelanggan Andi masih memiliki penjualan terkait.
-- Prediksi terlebih dahulu: galat 1451 WAJIB muncul.
DELETE FROM pelanggan
WHERE nama = 'Andi';
-- D: Uji keberhasilan — pelanggan tanpa referensi dapat dihapus.
INSERT INTO pelanggan (nama, no_hp, alamat)
VALUES ('Budi Santoso', '081399999999', 'Jl. Cempaka No. 5');
DELETE FROM pelanggan
WHERE nama = 'Budi Santoso';
Alur pada kode
Menambah baris baru. Kunci asing diperiksa oleh sistem database sebelum baris disimpan.
Membaca data satu tabel atau lintas tabel. Perintah ini tidak mengubah data.
Mengubah atau menghapus baris yang dipilih oleh WHERE. Penolakan oleh sistem merupakan bukti integritas.
9. Jalankan, Uji, dan Amati
Sebelum menjalankan setiap perintah, catat hasil yang diprediksi. Bandingkan dengan keluaran phpMyAdmin dan jelaskan selisihnya apabila berbeda.
| Kasus uji | Perintah | Hasil yang seharusnya |
|---|---|---|
| Create baris valid | INSERT pelanggan Dewi Lestari | 1 baris ditambahkan. |
| Create dengan kunci asing tidak valid | INSERT penjualan dengan id_pelanggan = 9999 | Galat 1452 — baris anak tanpa induk yang sesuai tidak dapat disimpan. |
| Read dengan filter | SELECT pelanggan WHERE nama LIKE 'D%' | Baris Dewi Lestari muncul. |
| Read lintas tabel | SELECT dengan JOIN | Lima penjualan terbaru ditampilkan beserta nama pelanggannya. |
| Update dengan WHERE | UPDATE alamat Dewi Lestari | 1 baris berubah. SELECT ulang menampilkan alamat baru. |
| Update dengan kunci asing tidak valid | UPDATE penjualan dengan id_pelanggan = 9999 | Galat 1452. |
10. Uji Penghapusan Berelasi dan Tidak Berelasi
Pengujian ini membedakan penghapusan yang ditolak dan yang diterima oleh sistem database.
| Data | Kondisi | Hasil yang seharusnya |
|---|---|---|
| Andi | Memiliki penjualan terkait | Galat 1451 Cannot delete or update a parent row. Data tidak terhapus. |
| Budi Santoso | Tidak memiliki referensi | 1 baris terhapus. |
11. Mini Challenge
- Pada sistem pilihan mahasiswa, tuliskan satu contoh untuk masing-masing operasi Create, Read, Update, dan Delete beserta nama tabel yang terlibat.
- Tentukan satu data yang tidak boleh dihapus secara langsung pada sistem tersebut. Jelaskan alasannya dan rancang alternatif berupa soft delete beserta kolom status yang diperlukan.
- Tuliskan satu perintah UPDATE yang tepat untuk mengubah satu data. Jelaskan mengapa klausa WHERE wajib dicantumkan.
- Buat satu perintah SELECT dengan JOIN pada database penjualan yang menampilkan dua kolom dari tabel berbeda. Prediksi hasilnya sebelum dijalankan.
12. Hubungkan dengan Project Semester — CRUD Matrix
Susun CRUD Matrix untuk seluruh entitas pada sistem pilihan mahasiswa. Matriks ini memuat baris berupa entitas dan kolom berupa operasi Create, Read, Update, dan Delete.
Pelanggan: C, R, U · Booking: C, R, U, D (dibatalkan) · Pembayaran: C, R.
Anggota: C, R, U, D (soft delete) · Buku: C, R, U · Peminjaman: C, R, U.
Kendaraan atau produk: C, R, U · Servis atau transaksi: C, R, U · Data keuangan: C, R (tidak dihapus langsung).
Contoh huruf pada kotak di atas hanya ilustrasi; mahasiswa menentukan sendiri operasi yang sesuai dengan sistem pilihannya.
13. Tugas Project Book — Minggu 6
- Tetap gunakan sistem project semester yang sama.
- Susun CRUD Matrix lengkap untuk seluruh entitas, termasuk alasan setiap operasi Delete atau alternatifnya.
- Tulis minimal satu perintah untuk masing-masing operasi Create, Read, Update, dan Delete pada database project, beserta prediksi hasilnya.
- Dokumentasikan satu pengujian penolakan galat 1451 atau 1452, lengkap dengan analisis komponen yang menolak.
- Lampirkan tangkapan layar hasil SELECT dan berkas SQL. Unggah sesuai arahan dosen.
Operasi → tabel dan kolom → perintah SQL → prediksi → hasil yang diamati → analisis (diterima atau ditolak dan alasannya).
14. Quis Pertemuan 6
- Sebutkan empat operasi CRUD beserta perintah SQL yang sesuai dengan masing-masing operasi.
- Mengapa klausa WHERE wajib dicantumkan pada UPDATE dan DELETE? Jelaskan dampak apabila klausa tersebut dihilangkan.
- Jelaskan mengapa penghapusan pelanggan yang masih memiliki penjualan ditolak oleh sistem database. Sebutkan galat yang muncul.
- Apa yang dimaksud dengan soft delete? Berikan satu contoh data yang lebih tepat diperlakukan dengan soft delete daripada dihapus langsung.
- Pada perintah INSERT ke tabel penjualan dengan id_pelanggan = 9999, komponen manakah yang melakukan penolakan, dan mengapa hal tersebut menjaga integritas data?
- Jelaskan perbedaan SELECT tanpa JOIN dan SELECT dengan JOIN. Berikan satu contoh kasus untuk masing-masing.
- Pada sistem booking lapangan, data booking yang sudah dibayar boleh dihapus atau tidak? Jelaskan dengan merujuk pada keutuhan data keuangan.
Quis/aktivitas mengikuti aturan kelas dan arahan dosen. Pastikan jawaban yang dikumpulkan dapat dipertanggungjawabkan oleh mahasiswa.
15. Ringkasan
INSERT
SELECT
UPDATE + WHERE
DELETE + kunci asing
Empat operasi CRUD mengelola data. Kunci asing menentukan data mana yang boleh diubah atau dihapus.
Pertemuan 7 memanfaatkan operasi CRUD ini sebagai dasar integrasi fungsi web. Simpan Project Book, CRUD Matrix, dan berkas SQL milik mahasiswa.
Glosarium
Istilah bertanda garis putus-putus dapat diarahkan kursor atau difokuskan untuk menampilkan definisi singkat.