Cara memberi foreign key pada mysql

Cara memberi foreign key pada mysql

  • Course

    • Katalog Kelas

      Ikuti materi yang kamu butuhkan

    • Roadmap

      Belajar online dengan terarah

  • Explore

    • Tutorial & Artikel

      Temukan Artikel menarik

    • Podcast

      Podcast seputar pemrograman

    • Webinar

      Ikuti Berbagai Webinar

    • Event

      Temukan Event menarik

    • Beasiswa

      Program Beasiswa

    • Discord

      Komunitas Discord

    • Forum

      Diskusi antar Programmer

    • Leaderboard

      Ranking siswa Codepolitan

  • Bootcampnew
  • Flashsale
  • Partnership

    • For Company

      Solusi tepat untuk perusahaan

    • For School

      Kerjasama untuk sekolah

    • For Campus

      Kerjasama untuk kampus

    • For Mentor

      Peluang penghasilan untuk mentor

  • Career

LoginRegister

{tocify} $title={Daftar Isi}

Pendahuluan:

Foreign key pada mysql digunakan untuk membangun dan menjaga hubungan antar dua tabel atau lebih, tabel dengan foreign key disebut child table dan tabel referensinya disebut sebagai parent table. Ketika akan membuat foreign key diperlukan kolom yang akan menyimpan data berdasarkan tabel referensi (parent). Pembahasan mengenai foreign key dapat dicari dan dibaca melalui halaman daftar isi.

Create Table

Cara pertama untuk membuat foreign key adalah pada saat mendefinisikan tabel, kita dapat langsung membuat/menambahkan foreign key di dalamnya dengan format dan contohnya sebagai berikut:

Format:

create table nama_tabel (nama_kolom tipe_data(length)..., foreign key (nama_kolom) references nama_tabel_referensi (nama_kolom_referensi));

create table nama_tabel (nama_kolom tipe_data(length)..., constraint nama_constraint foreign key (nama_kolom) references nama_tabel_referensi (nama_kolom_referensi));

Contoh:

mysql> create table dosen (id_dosen int primary key auto_increment, nid char(8), nama varchar(65), j_kel enum("L","P"), t_lahir date, alamat varchar(50), kota varchar(50), telepon char(12), email varchar(50));
Query OK, 0 rows affected (0.12 sec)

mysql> create table gaji (id_gaji int primary key auto_increment, dosen_id int, kontrak char(9), gaji_pokok varchar(14), tunjangan varchar(14), lembur varchar(14), foreign key (dosen_id) references dosen (id_dosen));
Query OK, 0 rows affected (0.21 sec)

mysql> create table gaji (id_gaji int primary key auto_increment, dosen_id int, kontrak char(9), gaji_pokok varchar(14), tunjangan varchar(14), lembur varchar(14), constraint fk_dosen foreign key (dosen_id) references dosen (id_dosen));
Query OK, 0 rows affected (0.22 sec)

Jika saat mendefinisikan tabel sementara nama constraint untuk foreign key tidak didefinisikan maka akan diberi nama secara default yang mana nama constraintnya dapat dilihat dengan menjalankan perintah show create table nama_tabel.

Alter Table

Cara kedua untuk membuat/menambahkan foreign key adalah dengan menjalankan alter table, ini dilakukan jika pada saat mendefinisikan table kita lupa untuk memberikan foreign key. Format dan contohnya sebagai berikut:

Format:

alter table nama_tabel add foreign key (nama_kolom) references nama_tabel_referensi (nama_kolom_referensi);
alter table nama_tabel add constraint nama_constraint foreign key (nama_kolom) references nama_tabel_referensi (nama_kolom_referensi);

Contoh:

mysql> alter table gaji add foreign key (dosen_id) references dosen (id_dosen);
Query OK, 0 rows affected (0.23 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table gaji add constraint FK_dosen foreign key (dosen_id) references dosen (id_dosen);
Query OK, 0 rows affected (0.28 sec)
Records: 0  Duplicates: 0  Warnings: 0

Menghapus Foreign Key

Kita juga dapat menghapus foreign key di mana ada beberapa alasan ketika foreign key perlu dihapus:

  • Ingin menghapus parent table
  • Merubah/memodifikasi kolom referensi pada parent table

Format dan contohnya sebagai berikut:

Format:

alter table nama_tabel drop foreign key nama_constraint
alter table nama_tabel drop constraint nama_constraint;

Contoh:

mysql> alter table gaji drop foreign key FK_dosen;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table gaji drop constraint FK_dosen;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

Merubah Parent Tabel

Jika pada suatu waktu parent table perlu dimodifikasi terutama pada kolom yang menjadi referensi dari child tabel maka kita perlu menghapus foreign key terlebih dahulu untuk dapat menjalankan operasi alter table pada table parent. Contohnya penulis memiliki tabel seperti berikut:

mysql> desc dasen;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| id_disen | int           | NO   | PRI | NULL    |       |
| nid      | char(8)       | YES  |     | NULL    |       |
| nama     | varchar(65)   | YES  |     | NULL    |       |
| j_kel    | enum('L','P') | YES  |     | NULL    |       |
| t_lahir  | date          | YES  |     | NULL    |       |
| alamat   | varchar(50)   | YES  |     | NULL    |       |
| kota     | varchar(50)   | YES  |     | NULL    |       |
| telepon  | char(12)      | YES  |     | NULL    |       |
| email    | varchar(50)   | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
9 rows in set (0.01 sec)

mysql> desc gaji;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id_gaji    | int         | NO   | PRI | NULL    | auto_increment |
| dosen_id   | int         | YES  | MUL | NULL    |                |
| kontrak    | char(9)     | YES  |     | NULL    |                |
| gaji_pokok | varchar(14) | YES  |     | NULL    |                |
| tunjangan  | varchar(14) | YES  |     | NULL    |                |
| lembur     | varchar(14) | YES  |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

Asumsikan pada tabel parent (dasen) penulis salah memberi nama tabel yang seharusnya menjadi dosen serta kolom id_disen yang seharusnya id_dosen dan penulis juga lupa untuk menambahkan atribut auto_increment pada kolom id_disen sehingga harus menambahkkannya, maka penulis perlu menjalankan perintah alter table, contohnya seperti berikut:

mysql> alter table dasen rename to dosen;
Query OK, 0 rows affected (0.06 sec)

mysql> alter table dosen rename column id_disen to id_dosen;
Query OK, 0 rows affected (0.22 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table dosen change id_dosen id_dosen int auto_increment;
ERROR 1833 (HY000): Cannot change column 'id_dosen': used in a foreign key constraint 'fk_dosen' of table 'latihan2.gaji'

Dapat dilihat bahwa penulis dapat mengganti nama tabel dan kolom pada tabel dasen namun tidak bisa menambahkan atribut auto_increment karena kolom tersebut menjadi referensi dari untuk child table (gaji), dengan demikian kita perlu menghapus foreign key terlebih dahulu dari child table sehingga dapat memodifikasi kolom id_dosen, contohnya seperti berikut:

mysql> alter table gaji drop constraint FK_dosen;
Query OK, 0 rows affected (0.27 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table dosen change id_dosen id_dosen int auto_increment;
Query OK, 0 rows affected (0.31 sec)
Records: 0  Duplicates: 0  Warnings: 0

Untuk mencegah permasalahan serupa kita perlu memahami karakteristik dari foreign key, diantaranya sebagai berikut:

  • Hanya dapat mengambil referensi dari satu tabel saja
  • Kolom dengan foreign key dapat berisi duplikasi data selama tidak menambahkan constraint unique
  • Foreign key hanya dapat mengambil referensi dari kolom unik / primary key pada parent tabel
  • Tipe data yang digunakan pada child table harus sama dengan parent table

Langkah langkah membuat foreign key?

Cara Membuat Foreign Key di PHPMyAdmin.
Pertama kamu haru membuka tabel yang ingin kamu tambahkan foreign key tersebut dan buka tab 'Structure'. Kamu akan melihat sub menu 'Relation View'..
Pilih kolom yang menampung kunci asing serta tabel yang akan kamu referensikan dengan foreign key tersebut..

Apa itu foreign key di MySQL?

Constraint FOREIGN KEY adalah kunci yang digunakan untuk menghubungkan dua tabel bersama-sama.

Kapan bisa menggunakan foreign key?

Secara umum, foreign key biasa digunakan sebagai penanda hubungan antar tabel. Tabel pertama memiliki peran utama sehingga disebut sebagai primary key di dalamnya, dan tabel kedua merupakan foreign key yang biasa disebut dengan kunci asing.

Bagaimana caranya membuat sebuah field menjadi primary key?

Di Perancang 'Tabel': klik pemilih baris untuk kolom database yang ingin kamu tetapkan sebagai 'primary key'. Jika kamu ingin memilih beberapa kolom, tahan tombol 'CTRL' sambil mengklik pemilih baris untuk kolom lainnya. Klik kanan pemilih baris untuk kolom dan pilih Setel 'Primary Key'.