Foreign Key membantu membangun hubungan basis data dan menjaga integritas referensial. Mereka membantu menautkan satu atau lebih kolom dalam satu tabel ke tabel lain. Berikut cara menambahkan kunci asing di MySQL
Cara Menambahkan Kunci Asing di MySQL
Berikut adalah langkah-langkah untuk menambahkan kunci asing di MySQL. Anda dapat menambahkan batasan kunci asing menggunakan pernyataan CREATE TABLE atau ALTER TABLE di SQL
Berikut sintaks untuk membuat kunci asing di MySQL
Menggunakan ALTER TABLE
ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (foreign_key_name,...) REFERENCES parent_table(column_name,...);Dalam kueri di atas, nama_tabel adalah tabel tempat Anda ingin menambahkan kunci asing. constraint_name adalah nama batasan kunci asing. foreign_key_name, … adalah daftar kolom kunci asing
parent_table adalah tabel yang menjadi referensi kunci_asing Anda, diikuti dengan daftar nama kolom dalam tabel tersebut
Bonus Baca. Kolom Tabel Alter MySQL
Menggunakan BUAT TABEL
CREATE TABLE table_name( column_name column_description, CONSTRAINT constraint_name FOREIGN KEY (foreign_key_name,...) REFERENCES parent_table(column_name,...) )_Dalam kueri di atas, nama_tabel adalah tabel tempat Anda ingin menambahkan kunci asing. constraint_name adalah nama batasan kunci asing. foreign_key_name, … adalah daftar kolom kunci asing
parent_table adalah tabel yang menjadi referensi kunci_asing Anda, diikuti dengan daftar nama kolom dalam tabel tersebut
Harap dicatat, di ALTER TABLE Anda perlu menggunakan ADD CONSTRAINT sementara di CREATE TABLE Anda hanya perlu menggunakan kata kunci CONSTRAINT
Bonus Baca. Batasan MySQL DROP FOREIGN KEY
Contoh MySQL ADD FOREIGN KEY
Katakanlah Anda memiliki tabel berikut
Mari buat 2 tabel (kategori dan pesanan) dan tambahkan batasan kunci asing ke pesanan, merujuk kolom id di tabel kategori
Kami ingin membuat tabel bernama student yang berisi kunci asing yang merujuk ke kolom id di tabel city
Solusi 1 (tabel baru)
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT FOREIGN KEY REFERENCES city(id) );Diskusi
Untuk membuat tabel baru yang berisi kolom kunci asing yang mereferensikan tabel lain, gunakan kata kunci FOREIGN KEY REFERENCES di akhir definisi kolom tersebut. Ikuti dengan nama tabel yang direferensikan dan nama kolom yang direferensikan dalam tanda kurung
Dalam contoh kami, kami membuat tabel student menggunakan klausa CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, FOREIGN KEY (city_id) REFERENCES city(id) ); 1. Kami mencantumkan nama kolom dan memasukkan tipe data masing-masing dalam tanda kurung. Kolom CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, FOREIGN KEY (city_id) REFERENCES city(id) ); _2 adalah kunci asing dalam tabel ini dan menunjukkan nilai ID yang disimpan di kolom id dalam tabel city. Kami menulis FOREIGN KEY REFERENCES di akhir definisi kolom ini dan mengikutinya dengan tabel dan kolom yang direferensikan. CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, FOREIGN KEY (city_id) REFERENCES city(id) ); 6
Ingatlah bahwa Anda dapat membuat lebih dari satu kunci asing untuk sebuah tabel
Solusi 2 (tabel baru)
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, FOREIGN KEY (city_id) REFERENCES city(id) );Diskusi
Cara lain untuk mendefinisikan kunci asing selama pembuatan tabel adalah dengan menggunakan klausa FOREIGN KEY REFERENCES di akhir definisi kolom. Dalam hal ini, setelah klausa CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, FOREIGN KEY (city_id) REFERENCES city(id) ); 8, kami menetapkan kolom kunci asing. Berikutnya adalah klausa CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, FOREIGN KEY (city_id) REFERENCES city(id) ); _9 bersama dengan nama tabel dan kolom yang dirujuk
Anda dapat membuat kunci asing di lebih dari satu kolom, seperti yang ditunjukkan di bawah ini
Solusi 3 (tabel baru)
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) ); _Dalam contoh ini, kendala CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) ); _0 adalah kunci asing yang terdiri dari dua kolom. CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) ); 1 dan CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) ); 2. Dua kolom kunci asing ini mengacu pada dua kolom dalam tabel CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) ); 3 – CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) ); 1 dan CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) ); 2
Ini contoh lainnya
Solusi 4 (tabel baru)
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, CONSTRAINT fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id) );Diskusi
Dalam kode ini, kami kembali memiliki klausa CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) ); _6 dengan nama kendala ini. Gunakan nama yang mudah dibaca dan dipahami. Dalam contoh kami, kami menggunakan nama CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) ); _7, yang menunjukkan tabel dan kolom yang relevan. Selanjutnya kita tulis CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, FOREIGN KEY (city_id) REFERENCES city(id) ); 8 dan tambahkan (dalam tanda kurung) nama kolom yang menjadi foreign key. Kemudian kita memiliki klausa CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, FOREIGN KEY (city_id) REFERENCES city(id) ); _9 diikuti dengan nama tabel dan kolom yang direferensikan (di sini. id)
Solusi 5 (tabel yang ada)
ALTER TABLE student ADD FOREIGN KEY (city_id) REFERENCES city(id);Diskusi
Dimungkinkan juga untuk menambahkan kunci asing baru ke tabel yang sudah ada. Di sini, tabel diubah menggunakan klausa ________16______1. Nama tabel (dalam contoh kita, student) ditempatkan setelah kata kunci CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, CONSTRAINT fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id) ); 1. Selanjutnya klausa CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, CONSTRAINT fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id) ); _4 diikuti dengan nama kolom yang akan dijadikan foreign key. Kemudian kita memiliki CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, CONSTRAINT fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id) ); _5 dengan nama tabel yang direferensikan dan nama kolom primary key dalam tanda kurung
Perhatikan bahwa tabel yang Anda modifikasi harus ada sebelum perintah ini dijalankan
Solusi 6 (tabel yang ada, batasan kunci asing)
ALTER TABLE student ADD CONSTRAINT fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id)Diskusi
Gunakan kueri seperti ini jika Anda ingin menamai kolom kunci asing sebagai batasan untuk tabel yang sudah ada. Di sini, batasan kunci asing diberi nama CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) ); 7. Jika Anda tidak menentukan nama kendala, database akan menghasilkan nama kendala default (yang akan bervariasi menurut basis data)