Primary key adalah kolom atau kombinasi kolom pada tabel basis data relasional yang berfungsi untuk mengidentifikasi setiap baris data secara unik (unique identifier). Dalam sistem manajemen basis data MySQL, sebuah tabel wajib memiliki aturan primary key agar integritas data tetap terjaga, mencegah duplikasi baris, dan mempercepat proses pencarian data (indexing).
Secara teknis, nilai pada primary key tidak boleh bernilai kosong (NOT NULL) dan harus unik untuk setiap record. MySQL mendukung berbagai jenis primary key mulai dari satu kolom tunggal berbasis angka (integer), kombinasi dua kolom (composite key), hingga penggunaan string unik seperti UUID.
1. Contoh Primary Key Menggunakan Integer (Auto Increment)
Metode paling umum dan direkomendasikan untuk sebagian besar tabel aplikasi web adalah menggunakan tipe data integer dengan atribut AUTO_INCREMENT. MySQL akan secara otomatis mengisi kolom ini dengan angka berurutan untuk setiap baris baru yang dimasukkan.
CREATE TABLE mahasiswa (
id_mhs INT NOT NULL AUTO_INCREMENT,
nim VARCHAR(20) NOT NULL,
nama_lengkap VARCHAR(100) NOT NULL,
jurusan VARCHAR(50),
PRIMARY KEY (id_mhs)
);
Pada contoh di atas, kolom id_mhs bertindak sebagai primary key yang bernilai unik secara otomatis setiap kali ada data mahasiswa baru yang dimasukkan ke dalam tabel.
2. Contoh Composite Primary Key (Primary Key Gabungan)
Composite primary key adalah penggunaan dua atau lebih kolom secara bersama-sama untuk membentuk satu identifikasi unik. Metode ini sering digunakan pada tabel relasi (junction table) atau sistem transaksional.
CREATE TABLE matakuliah_mhs (
nim VARCHAR(20) NOT NULL,
kode_mk VARCHAR(10) NOT NULL,
semester INT NOT NULL,
PRIMARY KEY (nim, kode_mk)
);
Dalam contoh tabel perwalian di atas, satu mahasiswa dapat mengambil banyak mata kuliah, dan satu mata kuliah diambil oleh banyak mahasiswa. Kombinasi antara nim dan kode_mk memastikan tidak ada mahasiswa yang mengambil mata kuliah yang sama dua kali pada entri yang identik.
3. Contoh Primary Key Menggunakan UUID (Universally Unique Identifier)
Untuk kebutuhan sistem terdistribusi atau keamanan tingkat tinggi di mana nomor urut angka dikhawatirkan mudah ditebak, UUID sering digunakan sebagai pengganti angka integer.
CREATE TABLE transaksi (
id_transaksi VARCHAR(36) NOT NULL,
tanggal_transaksi DATETIME,
total_bayar DECIMAL(10, 2),
PRIMARY KEY (id_transaksi)
);
Tabel Perbandingan Jenis Primary Key di MySQL
| Jenis Primary Key | Tipe Data Umum | Kelebihan | Kekurangan |
|---|---|---|---|
| Single Column (Auto Increment) | INT / BIGINT | Performa indexing sangat cepat, mudah diimplementasikan. | Nilai dapat ditebak (rawan enumerasi ID pada URL publik). |
| Composite Key | Kombinasi VARCHAR/INT | Cocok untuk tabel relasi many-to-many tanpa ID tambahan. | Relasi foreign key lebih rumit dan memakan memori lebih besar. |
| UUID / GUID | VARCHAR(36) / CHAR(36) | Unik secara global, aman dari tebakan urutan ID. | Ukuran penyimpanan lebih besar, performa index lebih lambat dibanding integer. |
Cara Menambahkan Primary Key pada Tabel yang Sudah Ada
Jika Anda sudah memiliki tabel yang dibuat sebelumnya tanpa primary key, Anda dapat menambahkannya menggunakan perintah ALTER TABLE dengan ketentuan kolom tersebut harus memiliki atribut NOT NULL.
ALTER TABLE produk
ADD CONSTRAINT pk_produk PRIMARY KEY (id_produk);
Tips Praktis Pengelolaan Primary Key
Pastikan kolom yang dipilih sebagai primary key tidak pernah mengalami perubahan nilai (immutable).
Gunakan tipe data BIGINT UNSIGNED jika Anda memperkirakan jumlah data dalam tabel akan mencapai miliaran baris di masa depan.
Hindari menggunakan kolom teks panjang seperti alamat email atau nama lengkap sebagai primary key tunggal karena akan menurunkan performa pencarian database secara drastis.