MySQL dan SQL

Primary Key dan Foreign Key pada MySQL: Pengertian, Perbedaan, dan Contoh Relasi Tabel

03 November 2026 Ditulis oleh Admin Artikel & Tutorial

Dalam pengelolaan database, data biasanya disimpan dalam beberapa tabel yang saling berhubungan. Misalnya, sebuah aplikasi penjualan memiliki tabel pelanggan, produk, transaksi, dan detail transaksi. Setiap tabel menyimpan informasi yang berbeda, tetapi tetap memiliki hubungan satu sama lain.

Agar hubungan antartabel dapat dikelola dengan baik, database menggunakan konsep Primary Key dan Foreign Key. Primary Key berfungsi sebagai identitas unik untuk setiap baris dalam tabel, sedangkan Foreign Key digunakan untuk menghubungkan suatu tabel dengan tabel lainnya.

Kedua konsep ini merupakan bagian penting dalam perancangan database relasional, termasuk pada MySQL. Tanpa pemahaman yang baik mengenai Primary Key dan Foreign Key, struktur database dapat menjadi tidak teratur dan berisiko mengalami masalah konsistensi data.

Pada artikel ini, kita akan membahas pengertian Primary Key dan Foreign Key, perbedaannya, serta contoh penerapannya menggunakan MySQL secara langsung.

1. Apa Itu Primary Key?

Primary Key adalah sebuah kolom atau kombinasi beberapa kolom yang digunakan untuk mengidentifikasi setiap baris data secara unik dalam sebuah tabel.

Artinya, setiap baris harus memiliki nilai Primary Key yang berbeda dan tidak boleh bernilai NULL. Sebagai contoh, sebuah tabel mahasiswa memiliki struktur berikut.

Geser tabel
id_mahasiswa nama_mahasiswa jurusan
1 Andi Informatika
2 Budi Sistem Informasi
3 Citra Informatika
4 Dedi Teknik Komputer

Pada tabel tersebut, kolom id_mahasiswa digunakan sebagai Primary Key karena setiap mahasiswa memiliki ID yang berbeda.

Meskipun terdapat dua mahasiswa yang memiliki jurusan sama, identitas mereka tetap dapat dibedakan melalui ID masing-masing.

Fungsi Primary Key

Primary Key memiliki beberapa fungsi penting dalam database, antara lain:

  1. Mengidentifikasi data secara unik. Setiap baris memiliki identitas yang berbeda sehingga tidak tertukar dengan data lainnya.
  2. Mencegah duplikasi nilai kunci. Database tidak mengizinkan nilai Primary Key yang sama pada baris berbeda.
  3. Menjadi acuan relasi antartabel. Primary Key dapat digunakan oleh tabel lain sebagai referensi melalui Foreign Key.
  4. Menjaga integritas data. Database memastikan setiap baris memiliki identitas yang valid.

Karakteristik Primary Key

Beberapa karakteristik Primary Key yang perlu diketahui:

  • Nilainya harus unik.
  • Tidak boleh bernilai NULL.
  • Setiap tabel hanya memiliki satu definisi PRIMARY KEY.
  • Dapat terdiri dari satu kolom atau beberapa kolom sekaligus.
  • Umumnya menggunakan tipe data INT untuk ID numerik.

Perlu diketahui bahwa satu tabel hanya memiliki satu constraint PRIMARY KEY, tetapi constraint tersebut dapat mencakup beberapa kolom. Hal ini disebut Composite Primary Key.

2. Apa Itu Foreign Key?

Foreign Key adalah kolom atau kombinasi beberapa kolom pada sebuah tabel yang digunakan untuk merujuk pada Primary Key atau kolom unik yang memenuhi persyaratan referensi pada tabel lain.

Foreign Key berfungsi menjaga hubungan dan konsistensi data antartabel. Sebagai contoh, sebuah aplikasi akademik memiliki dua tabel, yaitu mahasiswa dan nilai.

Tabel mahasiswa

Geser tabel
id_mahasiswa nama_mahasiswa
1 Andi
2 Budi
3 Citra

Tabel nilai

Geser tabel
id_nilai id_mahasiswa nilai
101 1 85
102 2 90
103 1 88

Pada tabel mahasiswa, id_mahasiswa merupakan Primary Key. Sementara itu, pada tabel nilai, id_mahasiswa merupakan Foreign Key yang mengacu pada id_mahasiswa di tabel mahasiswa.

Dengan hubungan tersebut, setiap nilai dapat diketahui sebagai milik mahasiswa tertentu.

Fungsi Foreign Key

Foreign Key memiliki beberapa fungsi utama, yaitu:

  1. Menghubungkan tabel. Memungkinkan data dari beberapa tabel saling berhubungan.
  2. Menjaga integritas referensial. Mencegah penyimpanan referensi ke data induk yang tidak tersedia.
  3. Mengurangi pengulangan data. Informasi mahasiswa tidak perlu ditulis berulang kali pada setiap baris tabel nilai.
  4. Mengatur perubahan dan penghapusan data. Database dapat menerapkan aturan tertentu ketika data yang menjadi referensi diubah atau dihapus.

Karakteristik Foreign Key

Beberapa karakteristik Foreign Key adalah:

  • Nilainya merujuk pada kolom yang memiliki constraint PRIMARY KEY atau UNIQUE pada tabel yang direferensikan.
  • Nilainya boleh berulang.
  • Nilainya dapat bernilai NULL jika kolom tidak ditetapkan NOT NULL.
  • Satu tabel dapat memiliki beberapa Foreign Key.
  • Kolom yang berhubungan harus memiliki tipe data dan atribut yang kompatibel.
  • Pada MySQL, penggunaan Foreign Key umumnya memerlukan storage engine InnoDB.

3. Perbedaan Primary Key dan Foreign Key

Meskipun sama-sama digunakan dalam pengelolaan database relasional, Primary Key dan Foreign Key memiliki fungsi yang berbeda.

Berikut tabel perbedaannya.

Geser tabel
Aspek Primary Key Foreign Key
Fungsi Identitas unik setiap baris Menghubungkan antartabel
Nilai Harus unik Boleh berulang
NULL Tidak diperbolehkan Diperbolehkan jika kolom mengizinkan
Jumlah Satu constraint per tabel Bisa lebih dari satu
Lokasi Tabel yang memiliki data utama Tabel yang menyimpan referensi
Tujuan Menjaga identitas data Menjaga integritas relasi

Contoh sederhananya:

  • id_mahasiswa pada tabel mahasiswa adalah Primary Key.
  • id_mahasiswa pada tabel nilai adalah Foreign Key.

Jadi, Primary Key digunakan untuk mengenali suatu data, sedangkan Foreign Key digunakan untuk menghubungkan data tersebut dengan tabel lainnya.

4. Apa Itu Relasi Tabel dalam Database?

Relasi tabel adalah hubungan antara dua tabel atau lebih dalam sebuah database relasional. Relasi dibuat agar data yang disimpan dalam beberapa tabel dapat saling terhubung dan digunakan sesuai kebutuhan aplikasi.

Dalam perancangan database, terdapat tiga jenis relasi yang umum digunakan, yaitu One-to-One, One-to-Many, dan Many-to-Many.

A. One-to-One (1:1)

One-to-One merupakan hubungan ketika satu baris data pada tabel pertama berhubungan dengan maksimal satu baris data pada tabel kedua, dan sebaliknya.

Contohnya adalah hubungan antara tabel pengguna dan tabel profil pengguna.

Geser tabel
Tabel Pengguna Tabel Profil
ID 1 - Andi Profil ID 101 - Andi
ID 2 - Budi Profil ID 102 - Budi
ID 3 - Citra Profil ID 103 - Citra

Pada hubungan tersebut, setiap pengguna memiliki satu profil. Contoh penerapannya adalah memisahkan data akun pengguna dengan informasi profil tambahan.

B. One-to-Many (1)

One-to-Many merupakan hubungan ketika satu baris data pada tabel pertama dapat berhubungan dengan banyak baris data pada tabel kedua.

Namun, setiap baris pada tabel kedua hanya merujuk pada satu baris data di tabel pertama. Contohnya adalah hubungan antara pelanggan dan transaksi.

Geser tabel
Pelanggan Transaksi
Andi Transaksi 101
Andi Transaksi 102
Budi Transaksi 103
Citra Transaksi 104

Satu pelanggan dapat melakukan banyak transaksi, tetapi satu transaksi hanya dimiliki oleh satu pelanggan.

Hubungan ini merupakan salah satu bentuk relasi yang paling sering digunakan dalam aplikasi sistem informasi.

C. Many-to-Many (M)

Many-to-Many merupakan hubungan ketika banyak baris pada tabel pertama dapat berhubungan dengan banyak baris pada tabel kedua.

Contohnya adalah hubungan antara mahasiswa dan mata kuliah.

  • Satu mahasiswa dapat mengambil beberapa mata kuliah.
  • Satu mata kuliah dapat diikuti oleh banyak mahasiswa.

Untuk menerapkan hubungan Many-to-Many dalam database relasional, biasanya diperlukan tabel penghubung atau junction table.

Contoh struktur tabelnya:

  1. Tabel mahasiswa.
  2. Tabel mata_kuliah.
  3. Tabel krs sebagai tabel penghubung.

Tabel krs menyimpan id_mahasiswa dan id_mata_kuliah sebagai Foreign Key.

Dengan demikian, hubungan Many-to-Many dapat diimplementasikan melalui dua hubungan One-to-Many.

5. Contoh Membuat Primary Key dan Foreign Key di MySQL

Setelah memahami konsep dasarnya, sekarang kita akan mencoba membuat Primary Key dan Foreign Key menggunakan MySQL.

Dalam praktik ini, kita akan membuat database sederhana untuk aplikasi akademik dengan dua tabel, yaitu mahasiswa dan nilai.

Langkah 1. Membuat Database

Pertama, buat database bernama db_akademik.

CREATE DATABASE db_akademik;

Kemudian pilih database tersebut.

USE db_akademik;

Langkah 2. Membuat Tabel Mahasiswa

Buat tabel mahasiswa dengan kolom id_mahasiswa sebagai Primary Key.

CREATE TABLE mahasiswa (
    id_mahasiswa INT AUTO_INCREMENT PRIMARY KEY,
    nama_mahasiswa VARCHAR(100) NOT NULL,
    jurusan VARCHAR(100) NOT NULL
) ENGINE=InnoDB;

Penjelasan:

  • id_mahasiswa merupakan identitas unik setiap mahasiswa.
  • INT digunakan untuk menyimpan bilangan bulat.
  • AUTO_INCREMENT membuat ID bertambah secara otomatis.
  • PRIMARY KEY menetapkan kolom sebagai kunci utama.
  • ENGINE=InnoDB menggunakan storage engine yang mendukung Foreign Key.

Langkah 3. Membuat Tabel Nilai

Selanjutnya, buat tabel nilai yang memiliki Foreign Key untuk menghubungkan data mahasiswa.

CREATE TABLE nilai (
    id_nilai INT AUTO_INCREMENT PRIMARY KEY,
    id_mahasiswa INT NOT NULL,
    mata_kuliah VARCHAR(100) NOT NULL,
    nilai DECIMAL(5,2) NOT NULL,
    CONSTRAINT fk_nilai_mahasiswa
        FOREIGN KEY (id_mahasiswa)
        REFERENCES mahasiswa(id_mahasiswa)
) ENGINE=InnoDB;

Pada tabel tersebut:

  • id_nilai merupakan Primary Key.
  • id_mahasiswa merupakan Foreign Key.
  • REFERENCES mahasiswa(id_mahasiswa) menunjukkan bahwa kolom Foreign Key merujuk pada Primary Key di tabel mahasiswa.
  • fk_nilai_mahasiswa merupakan nama constraint Foreign Key.

Langkah 4. Memasukkan Data Mahasiswa

Masukkan beberapa data mahasiswa berikut.

INSERT INTO mahasiswa (nama_mahasiswa, jurusan)
VALUES
    ('Andi', 'Informatika'),
    ('Budi', 'Sistem Informasi'),
    ('Citra', 'Informatika');

Langkah 5. Memasukkan Data Nilai

Selanjutnya, masukkan data nilai mahasiswa.

INSERT INTO nilai
    (id_mahasiswa, mata_kuliah, nilai)
VALUES
    (1, 'Basis Data', 85),
    (1, 'Pemrograman Web', 90),
    (2, 'Basis Data', 88),
    (3, 'Pemrograman Web', 92);

Perhatikan bahwa satu mahasiswa dapat memiliki lebih dari satu data nilai.

Hal ini menunjukkan hubungan One-to-Many antara tabel mahasiswa dan tabel nilai.

Langkah 6. Menampilkan Data dengan JOIN

Setelah kedua tabel memiliki data, kita dapat menggabungkannya menggunakan INNER JOIN.

SELECT
    mahasiswa.id_mahasiswa,
    mahasiswa.nama_mahasiswa,
    nilai.mata_kuliah,
    nilai.nilai
FROM mahasiswa
INNER JOIN nilai
    ON mahasiswa.id_mahasiswa = nilai.id_mahasiswa;

Hasil query:

Geser tabel
id_mahasiswa nama_mahasiswa mata_kuliah nilai
1 Andi Basis Data 85
1 Andi Pemrograman Web 90
2 Budi Basis Data 88
3 Citra Pemrograman Web 92

Dari hasil tersebut, kita dapat melihat bahwa data mahasiswa dan nilai berhasil digabungkan berdasarkan hubungan antara Primary Key dan Foreign Key.

6. Menggunakan ON DELETE dan ON UPDATE pada Foreign Key

MySQL menyediakan aturan referensial untuk menentukan tindakan ketika data yang menjadi referensi diubah atau dihapus.

Dua aturan yang sering digunakan adalah ON DELETE dan ON UPDATE.

A. ON DELETE CASCADE

ON DELETE CASCADE digunakan agar baris pada tabel anak ikut dihapus ketika baris yang menjadi referensi pada tabel induk dihapus.

Contohnya:

CREATE TABLE nilai_cascade (
    id_nilai INT AUTO_INCREMENT PRIMARY KEY,
    id_mahasiswa INT NOT NULL,
    mata_kuliah VARCHAR(100),
    FOREIGN KEY (id_mahasiswa)
        REFERENCES mahasiswa(id_mahasiswa)
        ON DELETE CASCADE
) ENGINE=InnoDB;

Jika seorang mahasiswa dihapus dari tabel mahasiswa, data nilai yang merujuk pada mahasiswa tersebut juga akan dihapus secara otomatis.

Aturan ini perlu digunakan dengan hati-hati karena penghapusan data dapat berdampak pada beberapa tabel sekaligus.

B. ON UPDATE CASCADE

ON UPDATE CASCADE digunakan untuk memperbarui nilai Foreign Key secara otomatis ketika nilai kolom yang direferensikan pada tabel induk berubah.

Contohnya:

CREATE TABLE nilai_update (
    id_nilai INT AUTO_INCREMENT PRIMARY KEY,
    id_mahasiswa INT NOT NULL,
    mata_kuliah VARCHAR(100),
    FOREIGN KEY (id_mahasiswa)
        REFERENCES mahasiswa(id_mahasiswa)
        ON UPDATE CASCADE
) ENGINE=InnoDB;

Jika ID mahasiswa yang menjadi referensi berubah, nilai Foreign Key pada tabel anak akan ikut diperbarui.

Dalam praktiknya, ID yang menggunakan AUTO_INCREMENT biasanya tidak perlu diubah. Namun, aturan ini dapat berguna pada kondisi tertentu.

C. ON DELETE SET NULL

Aturan ini digunakan untuk mengubah nilai Foreign Key menjadi NULL ketika data induk dihapus.

Contohnya:

FOREIGN KEY (id_mahasiswa)
    REFERENCES mahasiswa(id_mahasiswa)
    ON DELETE SET NULL

Untuk menggunakan aturan tersebut, kolom Foreign Key harus mengizinkan nilai NULL.

Selain ketiga aturan tersebut, MySQL juga menyediakan RESTRICT dan NO ACTION untuk membatasi penghapusan atau perubahan data induk yang masih memiliki referensi. Pada InnoDB, NO ACTION memiliki perilaku yang sama dengan RESTRICT.

7. Cara Melihat Primary Key dan Foreign Key pada MySQL

Setelah membuat tabel, kita dapat memeriksa struktur dan hubungan yang telah dibuat.

A. Melihat Struktur Tabel

Gunakan perintah berikut:

DESCRIBE mahasiswa;

Perintah tersebut akan menampilkan informasi kolom, tipe data, dan atribut setiap kolom.

B. Melihat Struktur Foreign Key

Untuk melihat definisi tabel secara lebih lengkap, gunakan:

SHOW CREATE TABLE nilai;

Hasilnya akan menampilkan perintah pembuatan tabel, termasuk constraint Foreign Key yang sudah diterapkan.

C. Melihat Relasi Menggunakan phpMyAdmin

Jika menggunakan phpMyAdmin, hubungan antartabel dapat diperiksa melalui fitur Relation View atau Designer, bergantung pada konfigurasi dan versi yang digunakan.

Fitur tersebut membantu pengguna melihat hubungan antara tabel secara visual sehingga lebih mudah memahami struktur database.

8. Kesalahan yang Sering Terjadi Saat Membuat Primary Key dan Foreign Key

Ketika membuat relasi antartabel, terdapat beberapa kesalahan yang sering dialami pemula.

1. Nilai Primary Key tidak unik
Primary Key tidak dapat memiliki nilai yang sama pada beberapa baris karena setiap data harus memiliki identitas berbeda.

2. Tipe data Foreign Key tidak sesuai
Kolom yang dihubungkan harus memiliki tipe data dan atribut yang kompatibel. Untuk kolom integer, ukuran dan atribut seperti UNSIGNED perlu diperhatikan.

3. Tabel menggunakan storage engine yang tidak mendukung Foreign Key
Pada MySQL, gunakan InnoDB agar constraint Foreign Key dapat diterapkan.

4. Data referensi belum tersedia
Ketika memasukkan data ke tabel anak, nilai Foreign Key harus memiliki pasangan pada tabel induk, kecuali kolom tersebut mengizinkan NULL.

5. Menghapus data induk yang masih memiliki relasi
Jika masih ada data anak yang merujuk pada data induk, penghapusan dapat ditolak sesuai aturan referensial yang digunakan.

6. Tidak memahami hubungan antartabel
Sebelum membuat Foreign Key, tentukan terlebih dahulu apakah hubungan yang digunakan adalah One-to-One, One-to-Many, atau Many-to-Many.
Dengan memahami kesalahan tersebut, kita dapat membuat struktur database yang lebih konsisten dan mudah dikembangkan.

9. Kesimpulan

Primary Key dan Foreign Key merupakan dua komponen penting dalam perancangan database relasional menggunakan MySQL.

Primary Key berfungsi sebagai identitas unik untuk setiap baris dalam tabel, sedangkan Foreign Key digunakan untuk menghubungkan suatu tabel dengan tabel lainnya.

Keduanya bekerja bersama untuk menjaga integritas data dan memastikan hubungan antartabel berjalan sesuai aturan yang telah ditentukan.

Dalam praktik pengembangan aplikasi, Primary Key dan Foreign Key banyak digunakan pada sistem informasi akademik, aplikasi penjualan, sistem inventaris, aplikasi keuangan, dan berbagai jenis aplikasi berbasis database.

Bagi mahasiswa yang sedang mengerjakan Skripsi atau Tugas Akhir, pemahaman mengenai kedua konsep ini sangat penting, terutama ketika merancang ERD, membuat struktur tabel, dan mengimplementasikan database menggunakan MySQL.

Dengan memahami Primary Key, Foreign Key, dan jenis relasi tabel, kita dapat membangun database yang lebih terstruktur, konsisten, dan mudah dikembangkan.

Artikel terkait:

Kedua artikel tersebut dapat dipelajari sebagai materi lanjutan untuk memahami cara mengolah dan menggabungkan data dari beberapa tabel menggunakan SQL.

Butuh Bantuan Skripsi atau Pembuatan Software?

Tim Anindyadev siap membantu bimbingan skripsi IT, pembuatan aplikasi kustom, dan implementasi metode algoritma.

Konsultasi Sekarang
Butuh Bantuan? Chat Kami