Semester 3 · 4 SKS · 200 menit · Project 06 — CRUD

CRUD & Operasi Data

Pertemuan 5 menghasilkan tabel yang saling berelasi dan terjaga integritas referensial. Pertemuan ini mengelola data pada tabel tersebut melalui empat operasi dasar: CRUD.

Konsep → Kasus NyataPrediksi → CodingJalankan → Analisis

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.

Create & Read
Menambah data baru dan menampilkan data sesuai kriteria, termasuk pembacaan lintas tabel.
Update & Delete
Mengubah dan menghapus data secara terkendali dengan memperhatikan kunci asing.
CRUD Matrix
Memetakan operasi CRUD terhadap seluruh data sistem sebagai bekal Blueprint V1 (P7).
Aturan kelas tetap sama: AI boleh membantu membuat contoh, mencari dokumentasi, debugging, dan merapikan SQL. Mahasiswa tetap harus mampu menjelaskan setiap perintah yang dijalankan: data apa yang berubah, baris mana yang terdampak, dan mengapa perintah tersebut diizinkan atau ditolak. Paper First, AI Later.

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.

Relasi terbentuk
P5
→
Operasi CRUD
P6 hari ini
→
Blueprint V1
P7
Batas materi hari ini: operasi dasar CRUD dan pengujiannya terhadap kunci asing. Perancangan antarmuka, validasi form, dan pengamanan aplikasi dibahas pada pertemuan berikutnya.

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.

OperasiMaknaPerintah SQLContoh pada data mahasiswa
CreateMenambah baris baruINSERTMahasiswa baru mendaftar
ReadMenampilkan dataSELECTMelihat daftar mahasiswa
UpdateMengubah isi barisUPDATEMahasiswa pindah alamat
DeleteMenghapus barisDELETEData mahasiswa dihapus
Prediksi awal: dari keempat operasi tersebut, mana yang paling berisiko mengganggu integritas data? Alasannya harus dikaitkan dengan relasi pada Pertemuan 5.

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.

Prediksi: hasil SELECT dengan JOIN akan memiliki jumlah baris yang sama dengan tabel anak, atau bisa lebih sedikit? Jelaskan alasannya.

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.

Kaidah: sebelum menjalankan UPDATE atau DELETE, jalankan SELECT dengan WHERE yang sama untuk memastikan baris yang terpilih benar.

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.

Pertimbangan: penghapusan data yang masih direferensikan menimbulkan galat 1451. Penghapusan tersebut diterima sistem hanya apabila tidak ada referensi yang tersisa.

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:

OperasiLaundryKampusBooking LapanganPerpustakaanBengkel
CreatePelanggan baru mendaftarMahasiswa baru mendaftarPelanggan baru membuat akunAnggota baru terdaftarKendaraan baru masuk bengkel
ReadMelihat riwayat cucianMelihat jadwal kuliahMelihat jadwal lapangan kosongMelihat daftar buku dipinjamMelihat riwayat servis
UpdatePelanggan pindah alamatMahasiswa pindah jurusanBooking dijadwal ulangStatus buku diperbaruiEstimasi servis diubah
DeletePelanggan ganda dihapusData mahasiswa salah input dihapusBooking dibatalkanAnggota nonaktif (soft delete)Data servis keliru dihapus
Cek pemahaman lisan: pada sistem kos, manakah operasi yang paling tepat untuk mengakhiri masa sewa penyewa: Delete atau Update? Jelaskan alasannya dengan merujuk pada riwayat pembayaran.

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

  1. Buka XAMPP Control Panel, pastikan Apache dan MySQL berjalan.
  2. Buka http://localhost/phpmyadmin, lalu buka tab SQL. Tidak perlu memilih database terlebih dahulu karena blok pertama akan membuatnya.
  3. Tempelkan blok kode sesuai urutan, kemudian klik Go/Kirim. Jalankan Mini coding 0 terlebih dahulu, lalu blok berikutnya satu per satu.
Mini coding 0 menghapus database penjualan_db lama pada komputer tersebut beserta seluruh isinya, lalu membuatnya kembali. Jalankan hanya pada komputer praktik, dan jangan pernah pada server yang berisi data nyata.
Mini coding 0 — bangun ulang penjualan_db dari awal
-- 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');
Mini coding 1 — pemeriksaan awal
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;
Mini coding 2 — Create (INSERT) dan pengujian kunci asing
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);
Mini coding 3 — Read (SELECT) dan JOIN
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;
Mini coding 4 — Update (UPDATE) dan Delete (DELETE)
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

INSERT
Menambah baris baru. Kunci asing diperiksa oleh sistem database sebelum baris disimpan.
SELECT + JOIN
Membaca data satu tabel atau lintas tabel. Perintah ini tidak mengubah data.
UPDATE + DELETE
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 ujiPerintahHasil yang seharusnya
Create baris validINSERT pelanggan Dewi Lestari1 baris ditambahkan.
Create dengan kunci asing tidak validINSERT penjualan dengan id_pelanggan = 9999Galat 1452 — baris anak tanpa induk yang sesuai tidak dapat disimpan.
Read dengan filterSELECT pelanggan WHERE nama LIKE 'D%'Baris Dewi Lestari muncul.
Read lintas tabelSELECT dengan JOINLima penjualan terbaru ditampilkan beserta nama pelanggannya.
Update dengan WHEREUPDATE alamat Dewi Lestari1 baris berubah. SELECT ulang menampilkan alamat baru.
Update dengan kunci asing tidak validUPDATE penjualan dengan id_pelanggan = 9999Galat 1452.
Apabila terjadi galat: No database selected berarti lupa baris USE penjualan_db;. Data Andi dan penjualan dengan id_penjualan = 1 tersedia dari Mini coding 0. Apabila perintah UPDATE atau DELETE menghasilkan 0 baris terdampak, jalankan ulang Mini coding 0 dan periksa dengan SELECT. phpMyAdmin dapat meminta konfirmasi untuk perintah UPDATE atau DELETE; baca dengan saksama sebelum menyetujui.

10. Uji Penghapusan Berelasi dan Tidak Berelasi

Pengujian ini membedakan penghapusan yang ditolak dan yang diterima oleh sistem database.

DataKondisiHasil yang seharusnya
AndiMemiliki penjualan terkaitGalat 1451 Cannot delete or update a parent row. Data tidak terhapus.
Budi SantosoTidak memiliki referensi1 baris terhapus.
Analisis tertulis: komponen manakah yang menolak penghapusan Andi: aplikasi PHP atau sistem database? Mengapa penolakan tersebut penting bagi keutuhan data penjualan?

11. Mini Challenge

  1. Pada sistem pilihan mahasiswa, tuliskan satu contoh untuk masing-masing operasi Create, Read, Update, dan Delete beserta nama tabel yang terlibat.
  2. 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.
  3. Tuliskan satu perintah UPDATE yang tepat untuk mengubah satu data. Jelaskan mengapa klausa WHERE wajib dicantumkan.
  4. Buat satu perintah SELECT dengan JOIN pada database penjualan yang menampilkan dua kolom dari tabel berbeda. Prediksi hasilnya sebelum dijalankan.
Challenge menjelaskan CRUD: pilih satu operasi, tunjukkan perintah SQL yang digunakan, sebutkan tabel dan kolom yang terlibat, serta jelaskan dampaknya terhadap data dan relasi.

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.

Booking lapangan
Pelanggan: C, R, U · Booking: C, R, U, D (dibatalkan) · Pembayaran: C, R.
Perpustakaan
Anggota: C, R, U, D (soft delete) · Buku: C, R, U · Peminjaman: C, R, U.
Bengkel / Toko / Kos
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

  1. Tetap gunakan sistem project semester yang sama.
  2. Susun CRUD Matrix lengkap untuk seluruh entitas, termasuk alasan setiap operasi Delete atau alternatifnya.
  3. Tulis minimal satu perintah untuk masing-masing operasi Create, Read, Update, dan Delete pada database project, beserta prediksi hasilnya.
  4. Dokumentasikan satu pengujian penolakan galat 1451 atau 1452, lengkap dengan analisis komponen yang menolak.
  5. Lampirkan tangkapan layar hasil SELECT dan berkas SQL. Unggah sesuai arahan dosen.
Format analisis Project Book:
Operasi → tabel dan kolom → perintah SQL → prediksi → hasil yang diamati → analisis (diterima atau ditolak dan alasannya).

14. Quis Pertemuan 6

  1. Sebutkan empat operasi CRUD beserta perintah SQL yang sesuai dengan masing-masing operasi.
  2. Mengapa klausa WHERE wajib dicantumkan pada UPDATE dan DELETE? Jelaskan dampak apabila klausa tersebut dihilangkan.
  3. Jelaskan mengapa penghapusan pelanggan yang masih memiliki penjualan ditolak oleh sistem database. Sebutkan galat yang muncul.
  4. Apa yang dimaksud dengan soft delete? Berikan satu contoh data yang lebih tepat diperlakukan dengan soft delete daripada dihapus langsung.
  5. Pada perintah INSERT ke tabel penjualan dengan id_pelanggan = 9999, komponen manakah yang melakukan penolakan, dan mengapa hal tersebut menjaga integritas data?
  6. Jelaskan perbedaan SELECT tanpa JOIN dan SELECT dengan JOIN. Berikan satu contoh kasus untuk masing-masing.
  7. 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

Create
INSERT
→
Read
SELECT
→
Update
UPDATE + WHERE
→
Delete
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.

CRUDCreate, Read, Update, Delete: empat operasi dasar terhadap data.
INSERTPerintah SQL untuk menambah baris baru ke dalam tabel.
SELECTPerintah SQL untuk membaca data tanpa mengubahnya.
UPDATEPerintah SQL untuk mengubah isi baris yang sudah ada.
DELETEPerintah SQL untuk menghapus baris dari tabel.
WHEREKlausa yang membatasi baris yang dibaca, diubah, atau dihapus.
Soft DeletePenghapusan semu dengan menandai baris sebagai nonaktif.
Galat 1451Penghapusan induk ditolak karena masih ada baris anak yang merujuk.
Galat 1452Penyimpanan anak ditolak karena tidak ada baris induk yang sesuai.
AUTO_INCREMENTNilai kunci utama yang dibangkitkan otomatis oleh sistem.