Constraint: Satpam yang Menjaga Kualitas Data
Menjaga data tetap benar dengan NOT NULL, UNIQUE, DEFAULT, dan CHECK, serta membaca pesan error saat data melanggar aturan.
Data kotor itu mahal
Pernah menemukan data pelanggan tanpa nama, dua akun dengan email sama, atau saldo bernilai minus? Itu terjadi bila database tidak punya aturan. Constraint adalah aturan yang dipasang pada kolom, dan MySQL bertugas sebagai satpam: data yang melanggar langsung ditolak.
Lima constraint utama
| Constraint | Aturan | Contoh |
|---|---|---|
NOT NULL | Kolom wajib diisi | nama VARCHAR(60) NOT NULL |
UNIQUE | Tidak boleh ada nilai kembar | email VARCHAR(100) UNIQUE |
DEFAULT | Nilai otomatis jika tidak diisi | saldo INT DEFAULT 0 |
CHECK | Nilai harus memenuhi syarat (MySQL 8.0.16+) | CHECK (umur >= 17) |
PRIMARY KEY | Gabungan NOT NULL + UNIQUE, pengenal baris | id INT PRIMARY KEY |
Contoh lengkap
CREATE TABLE anggota (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(100) NOT NULL UNIQUE,
nama VARCHAR(60) NOT NULL,
umur INT CHECK (umur >= 17),
status VARCHAR(10) NOT NULL DEFAULT 'aktif'
);
Melihat satpam bekerja
INSERT INTO anggota (email, nama) VALUES (NULL, 'Budi');
-- ERROR: Column 'email' cannot be null
INSERT INTO anggota (email, nama) VALUES ('a@a.com', 'Ani');
INSERT INTO anggota (email, nama) VALUES ('a@a.com', 'Ana');
-- ERROR: Duplicate entry 'a@a.com' for key 'email'
INSERT INTO anggota (email, nama, umur) VALUES ('b@b.com', 'Bima', 10);
-- ERROR: Check constraint 'anggota_chk_1' is violated.
Error ini bukan musuh — ia tanda satpam menjalankan tugas. Aplikasimu cukup menangkap pesan itu dan memberi tahu pengguna dengan ramah.
DEFAULT dan NULL: dua hal yang sering tertukar
- NULL = "tidak ada nilai / tidak diketahui". Bukan nol, bukan string kosong.
- DEFAULT = nilai pengganti yang dipakai saat kamu tidak menyebut kolom itu di INSERT.
- Kolom tanpa
NOT NULLdan tanpaDEFAULTakan berisiNULLbila tidak diisi.
Prinsip emas: pasang aturan di database, jangan hanya di aplikasi. Aplikasi bisa punya bug, bisa ada banyak aplikasi yang menulis ke database yang sama, atau seseorang mengedit langsung lewat terminal. Database adalah benteng terakhir.