Galat MySQL hampir selalu datang dengan kode angka dan pesan singkat yang tampak seperti teka-teki pertama kali dibaca. Kabar baiknya: galat yang sama muncul berulang kali di proyek mana pun, sehingga pola penanganannya bisa dipelajari sekali dan dipakai selamanya. Chapter ini merangkum galat yang paling sering dijumpai pengembang — masing-masing dengan artinya, penyebab umumnya, dan langkah diagnosis — lalu menutup dengan kerangka berpikir untuk galat yang belum pernah dilihat. Beberapa contoh bisa kita reproduksi nyata di server latihan.
Galat Koneksi #
Empat angka pertama yang akan Anda kenal di hari-hari pertama bekerja dengan MySQL semuanya soal pintu masuk:
| Galat | Pesan | Arti dan tindakan |
|---|---|---|
| 1045 | Access denied | User/password salah, atau user tidak diizinkan dari host ini. Periksa user@host di mysql.user dan SHOW GRANTS. |
| 2003 | Can’t connect to MySQL server | Server tidak menyala, port salah, atau jaringan memblokir. Periksa layanan dan bind-address. |
| 1049 | Unknown database | Nama database salah atau belum dibuat. Periksa ejaan dan SHOW DATABASES. |
| 1203 | Too many connections | Pool aplikasi melampaui max_connections. Tinjau kebocoran koneksi sebelum menaikkan angka. |
Galat 1049 paling mudah direproduksi — cukup memilih database yang tidak ada:
-- @error
USE database_tidak_ada;Output yang Dihasilkan:
Query OK, 0 rows affected (0.00 sec)
ERROR 1049 (42000): Unknown database 'database_tidak_ada'
ByePesan “Unknown database” ini sering dijumpai pada skrip instalasi yang belum menjalankan berkas skema, atau salah ketik nama database di konfigurasi aplikasi.
Galat Integritas Data #
Keluarga galat ini justru kabar baik: constraint bekerja menolak data yang tidak sehat. Kode-kode yang paling sering muncul:
DROP DATABASE IF EXISTS belajar_trouble;
CREATE DATABASE belajar_trouble;
USE belajar_trouble;
CREATE TABLE produk (
id INT PRIMARY KEY,
nama VARCHAR(50) NOT NULL,
harga DECIMAL(10,2) NOT NULL
);
CREATE TABLE stok_gudang (
produk_id INT PRIMARY KEY,
jumlah INT NOT NULL,
CONSTRAINT fk_stok_produk
FOREIGN KEY (produk_id) REFERENCES produk (id)
);
INSERT INTO produk (id, nama, harga) VALUES (1, 'Kopi Gayo', 55000.00);
INSERT INTO stok_gudang (produk_id, jumlah) VALUES (1, 10);Output yang Dihasilkan:
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Database changed
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)Tiga galat integritas klasik bisa kita lihat nyata pada tabel di atas. Duplikat kunci utama ditolak dengan galat 1062:
-- @error
INSERT INTO produk (id, nama, harga) VALUES (1, 'Kopi Toraja', 62000.00);Output yang Dihasilkan:
Query OK, 0 rows affected (0.00 sec)
ERROR 1062 (23000): Duplicate entry '1' for key 'produk.PRIMARY'
ByeBaris anak yang merujuk induk yang tidak ada ditolak dengan galat 1452 — foreign key menjaga konsistensi relasi:
-- @error
INSERT INTO stok_gudang (produk_id, jumlah) VALUES (99, 5);Output yang Dihasilkan:
Query OK, 0 rows affected (0.00 sec)
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`belajar_trouble`.`stok_gudang`, CONSTRAINT `fk_stok_produk` FOREIGN KEY (`produk_id`) REFERENCES `produk` (`id`))
ByeKolom NOT NULL yang diisi NULL menghasilkan galat 1048, dan nilai di luar rentang tipe data memicu galat 1264 — dua pola yang dibahas lengkap di chapter Not Null Constraint
dan Integer
.
Galat Sintaks dan Struktur #
Galat 1064 (You have an error in your SQL syntax) adalah yang paling umum sekaligus paling jenaka: MySQL hanya menunjuk lokasi perkiraan kesalahan, bukan kesalahannya. Tiga penyebab teratasnya adalah tanda kutip yang tidak seimbang, koma yang tertinggal sebelum klausa, dan reserved word yang dipakai sebagai nama kolom tanpa backtick. Galat 1146 (Table doesn't exist) biasanya berarti salah database aktif — periksa dengan SELECT DATABASE() sebelum menyalahkan skrip. Galat 1054 (Unknown column) hampir selalu alias yang dipakai di WHERE — ingat urutan eksekusi logis — atau salah ketik nama kolom.
Galat Selama Eksekusi #
Deadlock (galat 1213) terjadi saat dua transaksi saling menunggu; InnoDB membatalkan salah satunya dan aplikasi cukup menjalankan ulang transaksinya. Lock wait timeout (galat 1205) menandakan transaksi lain memegang kunci terlalu lama — periksa SHOW PROCESSLIST dan transaksi yang lupa commit. Data truncated (1265/1266) muncul saat nilai tidak sepenuhnya cocok dengan tipe kolom, misalnya string lebih panjang dari VARCHAR atau nilai ENUM salah ketik — persis pola yang kita sengaja picu di Proyek Manajemen Tugas.
Kerangka untuk Galat Asing #
Ketika galat yang belum pernah dilihat muncul, kerangka tiga langkah menjaga kepala tetap dingin. Pertama, pisahkan nomor galat dari pesannya — nomornya bisa dicari di Error Message Reference
untuk definisi normatif dan kondisi pemicunya. Kedua, kecilkan reproduksinya: hapus klausa satu per satu sampai galat hilang, lalu perhatikan klausa terakhir yang dihapus — teknik yang sama dengan debugging kode. Ketiga, periksa keadaan server saat itu: SHOW WARNINGS setelah pernyataan gagal sering memuat detail yang tidak tampil di pesan utama, dan error log server merekam konteks penuh kejadian.
Referensi #
- Error Message Reference — MySQL 8.4
- Error Handling — MySQL 8.4 Reference Manual
- SHOW WARNINGS Statement — MySQL 8.4 Reference Manual
- SHOW PROCESSLIST Statement — MySQL 8.4 Reference Manual
Dengan peta galat ini, momen “kenapa gagal?” berubah menjadi “galat berapa?” — dan dari sana jawabannya tinggal dicari di rak yang benar. Chapter terakhir section menutup dengan glosarium: istilah-istilah MySQL yang dipakai sepanjang Course, dirangkum alfabetis.