Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Cara Membuat Tabel dengan Kunci Asing di SQL

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_subjectscore_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).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Persamaan dan Perbedaan Fungsi RANK, DENSE_RANK dan ROW_NUMBER

  2. Mitos Kinerja:Ukuran kolom string yang terlalu besar

  3. Cara Menyimpan Jadwal Karyawan di Database

  4. Unduh salinan database Anda

  5. Melacak Perubahan Basis Data Menggunakan Kontrol Sumber Folder Kerja