SQL Data Manipulation Language (DML): Pengelolaan dan Pemrosesan Data - Perwira Learning Center
Latar Belakang
Pada pembahasan kali ini, saya mempelajari Data Manipulation Language (DML) sebagai bagian dari klasifikasi perintah dalam SQL. Jika DDL berfokus pada pembentukan struktur database, maka DML berperan dalam mengelola data yang terdapat di dalam struktur tersebut. Perintah DML digunakan untuk menambahkan, menampilkan, memperbarui, dan menghapus data sesuai dengan kebutuhan sistem.
Artikel ini dibuat dengan tujuan untuk mendokumentasikan hasil pembelajaran saya mengenai penggunaan perintah DML dalam pengelolaan data. Selain sebagai bentuk refleksi, artikel ini juga diharapkan dapat membantu pembaca memahami bagaimana proses manipulasi data dilakukan setelah struktur database selesai dirancang.
Alat dan Bahan
Dalam proses pembelajaran dan penyusunan artikel ini, alat dan bahan yang digunakan meliputi:
1. Perangkat Lunak (Software)
Sistem Manajemen Basis Data (RDBMS) seperti MySQL
Web browser untuk mengakses dokumentasi resmi
Command Line Interface (CLI) atau GUI database misalnya phpMyAdmin
2. Perangkat Keras (Hardware)
Laptop atau komputer dengan sistem operasi Linux Ubuntu
Pengertian dan Ruang Lingkup DML
Data Manipulation Language (DML) adalah kumpulan perintah SQL yang digunakan untuk mengambil, menambah, mengubah, dan menghapus data dalam tabel database relasional. DML bekerja langsung pada isi tabel, bukan pada struktur atau metadata.
Fungsi utama DML dalam sistem relasional meliputi:
- Query data: mengambil data yang memenuhi kriteria tertentu.
- Insertion: menambahkan baris data baru ke dalam tabel.
- Modification: mengubah nilai kolom pada baris yang sudah ada.
- Deletion: menghapus baris dari tabel.
Keempat operasi ini sering disebut dengan akronim CRUD (Create, Read, Update, Delete), yang menjadi inti dari aplikasi berbasis data. Perintah DML yang sesuai dengan CRUD adalah:
- SELECT → Read
- INSERT → Create
- UPDATE → Update
- DELETE → Delete
Penting dipahami bahwa DML tidak mengubah definisi tabel atau skema. Struktur tabel (nama kolom, tipe data, constraint) ditentukan oleh DDL. DML hanya mengisi atau mengosongkan “wadah” yang telah disiapkan oleh DDL.
Perintah SELECT: Mengambil Data
Perintah SELECT adalah perintah yang paling sering digunakan dalam SQL. Fungsinya untuk mengambil data dari satu atau lebih tabel. Dalam artikel ini, kita batasi pada pengambilan dari satu tabel saja.
Struktur Dasar SELECT
SELECT kolom1, kolom2, ... FROM nama_tabel WHERE kondisi ORDER BY kolom ASC|DESC;
- SELECT diikuti daftar kolom yang ingin ditampilkan. Jika ingin semua kolom, gunakan tanda asterisk (*).
- FROM menentukan tabel sumber data.
- WHERE (opsional) digunakan untuk menyaring baris berdasarkan kondisi tertentu.
- ORDER BY (opsional) mengurutkan hasil query.
Memilih Kolom Tertentu
Misalkan kita memiliki tabel `pengguna` dengan kolom `id`, `nama`, `email`, dan `tanggal_daftar`. Untuk menampilkan hanya nama dan email semua pengguna:
SELECT nama, email FROM pengguna;
Hasilnya hanya dua kolom tersebut. Ini lebih efisien daripada SELECT * karena mengurangi jumlah data yang dikirim dari database ke aplikasi.
Filter dengan WHERE
Klausa WHERE memungkinkan kita mengambil baris yang memenuhi syarat. Contoh: cari pengguna yang bernama 'Andi':
SELECT * FROM pengguna WHERE nama = 'Andi';
Operator perbandingan yang umum digunakan di WHERE antara lain:
- = sama dengan
- <> atau != tidak sama dengan
- > lebih besar
- < lebih kecil
- >= lebih besar atau sama
- <= lebih kecil atau sama
- LIKE pencarian pola (misal "nama LIKE 'A%'" untuk nama berawalan A)
- IN dalam suatu himpunan (misal "id IN (1,2,3)")
Contoh dengan operator ">": ambil pengguna yang mendaftar setelah tanggal '2023-01-01':
SELECT nama, email FROM pengguna WHERE tanggal_daftar > '2023-01-01';
Pengurutan dengan ORDER BY
Untuk menampilkan data secara berurutan, gunakan `ORDER BY`. Misal, urutkan pengguna berdasarkan nama secara alfabetis:
SELECT nama, email FROM pengguna ORDER BY nama ASC;
ASC untuk urutan menaik (default), DESC untuk menurun.
Perintah INSERT: Menambahkan Data
INSERT digunakan untuk menambahkan baris baru ke dalam tabel. Ada dua cara umum: menyebutkan kolom yang akan diisi atau mengisi semua kolom sesuai urutan.
INSERT dengan Menyebutkan Kolom
Bentuk ini lebih disarankan karena lebih eksplisit dan mengurangi risiko kesalahan.
INSERT INTO pengguna (nama, email, tanggal_daftar) VALUES ('Siti', 'siti@email.com', '2024-02-21');
Daftar kolom setelah INSERT INTO menunjukkan kolom mana yang akan menerima nilai. Urutan nilai dalam VALUES harus sesuai dengan urutan kolom yang disebutkan. Kolom yang tidak disebutkan akan diisi nilai default (jika ada) atau NULL (jika diizinkan).
INSERT Tanpa Menyebutkan Kolom
Jika Anda yakin dengan struktur tabel dan ingin mengisi semua kolom sesuai urutan definisi tabel, bisa gunakan:
INSERT INTO pengguna VALUES (100, 'Budi', 'budi@email.com', '2024-02-21');
Namun cara ini rawan kesalahan jika struktur tabel berubah (misal ada penambahan kolom). Oleh karena itu, praktik terbaik adalah selalu menyebutkan kolom secara eksplisit.
Kesalahan Umum saat INSERT
1. Ketidaksesuaian tipe data: misal mengisi kolom angka dengan teks.
2. Melanggar constraint: seperti `NOT NULL` pada kolom yang tidak diisi, atau duplikasi pada kolom `UNIQUE`.
3. Jumlah nilai tidak sesuai: jika menyebutkan 3 kolom tetapi memberikan 4 nilai, akan error.
Pastikan nilai yang dimasukkan sudah divalidasi di sisi aplikasi sebelum dikirim ke database.
Perintah UPDATE: Memperbarui Data
UPDATE mengubah nilai kolom pada baris yang sudah ada. Karena operasi ini bersifat destructive (dapat mengubah banyak data sekaligus), kehati-hatian sangat diperlukan.
Struktur UPDATE
UPDATE nama_tabel SET kolom1 = nilai1, kolom2 = nilai2, ... WHERE kondisi;
- SET menentukan kolom mana yang diubah dan nilai barunya.
- WHERE menentukan baris mana yang akan diupdate. Jika `WHERE` dihilangkan, **SEMUA** baris dalam tabel akan diupdate—ini jarang diinginkan.
Contoh Update Terkontrol
Misal kita ingin mengubah email pengguna dengan id = 5:
UPDATE pengguna SET email = 'email_baru@domain.com' WHERE id = 5;
Kita juga bisa mengubah beberapa kolom sekaligus:
UPDATE pengguna SET nama = 'Ahmad', email = 'ahmad@email.com' WHERE id = 5;
Risiko Update Tanpa Kondisi
Bayangkan Anda lupa menambahkan `WHERE`:
UPDATE pengguna SET email = 'salah@email.com';
Semua baris dalam tabel pengguna akan berubah emailnya menjadi "salah@email.com" bencana di lingkungan produksi! Selalu pastikan klausa WHERE telah ditulis dengan benar. Biasanya, gunakan kolom unik seperti `id` untuk menargetkan baris spesifik.
Tips aman: sebelum menjalankan "UPDATE", tulis"SELECT" dengan kondisi yang sama untuk melihat baris mana yang akan terpengaruh.
SELECT * FROM pengguna WHERE id = 5; -- verifikasi data lama UPDATE pengguna SET email = 'baru@mail.com' WHERE id = 5;
Perintah DELETE: Menghapus Data
DELETE digunakan untuk menghapus baris dari tabel. Sama seperti UPDATE, perintah ini harus digunakan dengan sangat hati-hati.
Struktur DELETE
DELETE FROM nama_tabel WHERE kondisi;
- WHERE menentukan baris mana yang akan dihapus. Tanpa `WHERE`, semua baris akan terhapus.
Contoh Penghapusan Terkontrol
Hapus pengguna dengan id tertentu:
DELETE FROM pengguna WHERE id = 10;
Perbedaan DELETE dan TRUNCATE
Sekilas, TRUNCATE juga menghapus semua baris, tetapi ada perbedaan mendasar:
- DELETE adalah perintah DML yang menghapus baris satu per satu dan memicu trigger (jika ada). `DELETE` dapat dibatalkan jika masih dalam transaksi (ROLLBACK).
- TRUNCATE adalah perintah DDL yang langsung membebaskan ruang tabel dan tidak dapat di-rollback di beberapa RDBMS. `TRUNCATE` lebih cepat tetapi tidak selektif selalu menghapus semua baris.
Dalam konteks DML, kita fokus pada DELETE. Jika ingin menghapus semua baris dengan aman terkendali, "DELETE FROM tabel" (tanpa `WHERE`) bisa digunakan, tetapi pastikan Anda benar-benar ingin menghapus seluruh isi tabel.
Risiko Penghapusan Massal
Hapus semua pengguna yang tidak aktif dalam 2 tahun terakhir mungkin diinginkan, tetapi pastikan kondisinya tepat:
DELETE FROM pengguna WHERE last_login < '2022-01-01';
Sebelum mengeksekusi, sebaiknya jalankan `SELECT` untuk memverifikasi baris yang akan dihapus:
SELECT COUNT(*) FROM pengguna WHERE last_login < '2022-01-01';
Jika jumlahnya sesuai ekspektasi, baru jalankan `DELETE`.
Bagaimana DML Diproses oleh RDBMS
Memahami alur pemrosesan query DML di dalam Relational Database Management System (RDBMS) dapat membantu kita menulis query yang lebih efisien dan menghindari kesalahan. Berikut langkah-langkah umum:
1. Pengiriman Query: Aplikasi backend mengirimkan perintah SQL (misal `SELECT`) ke database melalui koneksi.
2. Parsing: RDBMS memeriksa sintaks SQL. Jika ada kesalahan ketik atau struktur yang salah, query ditolak.
3. Validasi Semantik: Sistem memeriksa keberadaan tabel dan kolom, serta hak akses pengguna. Misalnya, apakah tabel `pengguna` ada? Apakah user memiliki izin SELECT?
4. Optimasi: Untuk `SELECT`, optimizer menyusun rencana eksekusi terbaik (misal penggunaan indeks). Untuk `INSERT`, `UPDATE`, `DELETE`, optimizer menentukan cara paling efisien memodifikasi data.
5. Eksekusi: Perintah dijalankan terhadap data aktual. Data dibaca atau dimodifikasi di buffer pool dan dicatat dalam log transaksi (untuk keperluan recovery).
6. Pengembalian Hasil: Untuk `SELECT`, hasil dikembalikan ke aplikasi. Untuk `INSERT`, `UPDATE`, `DELETE`, biasanya hanya jumlah baris yang terpengaruh dikembalikan.
Selama eksekusi, RDBMS menjaga integritas data melalui constraint (PRIMARY KEY, FOREIGN KEY, CHECK, dll.). Jika ada pelanggaran, misal INSERT dengan nilai duplikat di kolom unik, query akan gagal dan perubahan dibatalkan.
Praktik Terbaik Penggunaan DML
Sebagai backend developer profesional, menerapkan praktik terbaik dalam manipulasi data akan menyelamatkan Anda dari banyak sakit kepala di kemudian hari.
Selalu Gunakan WHERE pada UPDATE dan DELETE
Kecuali memang Anda berniat mengubah atau menghapus semua baris, pastikan klausa `WHERE` selalu menyertai `UPDATE` dan `DELETE`. Gunakan kolom unik (seperti `id`) untuk target spesifik.
Uji dengan SELECT Sebelum UPDATE/DELETE
Biasakan menulis `SELECT` dengan kondisi yang sama untuk melihat data yang akan terkena dampak.
-- sebelum update SELECT * FROM pengguna WHERE id = 5; -- setelah yakin, jalankan update UPDATE pengguna SET email = 'baru@mail.com' WHERE id = 5;
Validasi Input dari Pengguna
Jangan pernah menggabungkan langsung input pengguna ke dalam query SQL karena rawan SQL injection. Gunakan parameterized query atau prepared statement di kode aplikasi (misal dengan PDO di PHP, `cursor.execute()` dengan parameter di Python, dll).
Gunakan Transaksi untuk Operasi Penting
Jika Anda perlu melakukan beberapa operasi DML yang harus berhasil semua atau gagal total, bungkus dalam transaksi. Misal, saat transfer bank: UPDATE rekening A (kurangi saldo) dan UPDATE rekening B (tambah saldo). Jika salah satu gagal, transaksi di-rollback.
BEGIN TRANSACTION; UPDATE rekening SET saldo = saldo - 100000 WHERE id = 1; UPDATE rekening SET saldo = saldo + 100000 WHERE id = 2;
Topik transaksi akan dibahas lebih dalam di artikel tentang TCL (Transaction Control Language).
Perhatikan Dampak Kinerja
Hindari `SELECT *` jika hanya butuh beberapa kolom. Untuk `UPDATE` dan `DELETE` pada tabel besar, pastikan kolom di `WHERE` diindeks agar tidak memblokir tabel terlalu lama.
Hasil Pembelajaran
Melalui pembelajaran ini, saya memahami bahwa perintah DML mencakup beberapa operasi utama, yaitu INSERT untuk menambahkan data baru ke dalam tabel, SELECT untuk menampilkan data, UPDATE untuk memperbarui data yang sudah ada, dan DELETE untuk menghapus data tertentu. Setiap perintah memiliki fungsi yang berbeda, namun saling berkaitan dalam proses pengelolaan informasi di dalam database.
Saya juga memahami pentingnya penggunaan kondisi seperti WHERE dalam perintah DML agar manipulasi data dilakukan secara tepat dan tidak memengaruhi seluruh isi tabel. Dengan penggunaan DML yang benar, data dapat dikelola secara lebih terkontrol, akurat, dan sesuai dengan kebutuhan aplikasi.
Kesimpulan
Data Manipulation Language (DML) merupakan bagian penting dalam SQL yang berfungsi untuk mengelola data di dalam database. Melalui DML, data dapat ditambahkan, ditampilkan, diperbarui, maupun dihapus sesuai dengan kebutuhan sistem.
Dengan memahami dan mempraktikkan perintah DML, saya dapat mengelola data secara lebih sistematis dan memastikan bahwa proses pengolahan informasi dalam aplikasi berjalan dengan efektif dan terarah.
Daftar Pustaka
Oracle Corporation. (n.d.). SQL data manipulation statements. MySQL 8.0 Reference Manual. Diakses pada 20 Februari 2026, dari https://dev.mysql.com/doc/
PostgreSQL Global Development Group. (n.d.). Data manipulation. PostgreSQL Documentation. Diakses pada 20 Februari 2026, dari https://www.postgresql.org/docs/
Microsoft. (n.d.). SELECT (Transact-SQL). Microsoft Learn. Diakses pada 20 Februari 2026, dari https://learn.microsoft.com/
IBM. (n.d.). SQL statements: INSERT, UPDATE, DELETE. IBM Documentation. Diakses pada 20 Februari 2026, dari https://www.ibm.com/docs/
OWASP Foundation. (n.d.). SQL injection prevention cheat sheet. Diakses pada 20 Februari 2026, dari https://owasp.org/
Dicoding Indonesia. (n.d.). Belajar dasar SQL untuk pemula. Diakses pada 20 Februari 2026, dari https://www.dicoding.com/
Petani Kode. (n.d.). Tutorial query SELECT, INSERT, UPDATE, dan DELETE. Diakses pada 20 Februari 2026, dari https://www.petanikode.com/
Niagahoster. (n.d.). Pengertian DML dalam SQL dan contohnya. Diakses pada 20 Februari 2026, dari https://www.niagahoster.co.id/