Masalah:
Anda ingin membuat kunci asing untuk tabel dalam database.
Contoh:
Kami ingin membuat tabel bernama student
yang berisi kunci asing yang merujuk ke id
kolom dalam 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 itu. Ikuti itu dengan nama tabel yang direferensikan dan nama kolom yang direferensikan dalam tanda kurung.
Dalam contoh kami, kami membuat tabel student
menggunakan CREATE TABLE
ayat. Kami mencantumkan nama kolom dan memasukkan tipe data masing-masing dalam tanda kurung. Kolom city_id
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 ikuti dengan tabel dan kolom yang dirujuk:city(id)
.
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 FOREIGN KEY REFERENCES
klausa di akhir definisi kolom. Dalam hal ini, setelah FOREIGN KEY
klausa, kami menetapkan kolom kunci asing. Berikutnya adalah REFERENCES
klausa beserta 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, batasan fk_student_score_subject_id
adalah kunci asing yang terdiri dari dua kolom:score_id
dan subject_id
. Dua kolom kunci asing ini merujuk ke dua kolom dalam tabel score_subject
– score_id
dan subject_id
.
Ini contoh lain:
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, kita kembali memiliki CONSTRAINT
klausa dengan nama kendala ini. Gunakan nama yang mudah dibaca dan dipahami. Dalam contoh kami, kami menggunakan nama fk_student_city_id
, yang menunjukkan tabel dan kolom yang relevan. Selanjutnya, kita tulis FOREIGN KEY
dan tambahkan (dalam tanda kurung) nama kolom yang menjadi kunci asing. Kemudian kita memiliki REFERENCES
klausa diikuti dengan nama tabel dan kolom yang dirujuk (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 ada. Di sini, tabel diubah menggunakan ALTER TABLE
ayat. Nama tabel (dalam contoh kita, student
) ditempatkan setelah ALTER TABLE
kata kunci. Selanjutnya, ADD FOREIGN KEY
klausa diikuti dengan nama kolom yang akan digunakan sebagai kunci asing. Kemudian kita memiliki REFERENCES clause
dengan nama tabel yang direferensikan dan nama kolom kunci utama 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 memberi nama kolom kunci asing sebagai batasan untuk tabel yang ada. Di sini, batasan kunci asing diberi nama fk_student_city_id
. Jika Anda tidak menentukan nama batasan, database akan menghasilkan nama batasan default (yang akan bervariasi menurut database).