Cara menggunakan Batasan Kunci Asing MySQL

How Use Mysql Foreign Key Constraints



Batasan kunci asing digunakan untuk membuat hubungan antara dua tabel dalam database MySQL. Ini adalah fitur yang sangat penting dari MySQL untuk mengatur berbagai jenis pembatasan pada tabel terkait. Untuk menentukan batasan kunci asing apa pun untuk tabel apa pun, Anda harus menggunakan kunci utama tabel lain. Kunci utama adalah kunci unik untuk sebuah tabel untuk mengidentifikasi baris tertentu dalam tabel dan ketika kunci utama ini digunakan ke tabel lain untuk membuat hubungan satu-ke-satu atau satu-ke-banyak atau banyak-ke-banyak maka itu disebut kunci asing. Fitur kunci asing dan bagaimana kunci ini dapat digunakan dalam tabel MySQL ditampilkan dalam artikel ini.

Fitur Batasan Kunci Asing:

Beberapa fitur penting dari batasan kunci asing dijelaskan di bawah ini.







  • Tipe data foreign key yang digunakan pada tabel anak harus sama dengan tipe data primary key yang digunakan pada tabel parent untuk merujuk foreign key.
  • Setiap kolom indeks atau beberapa kolom dapat direferensikan sebagai kunci asing untuk tabel InnoDB saja.
  • Hak referensi atau setidaknya salah satu hak istimewa dari pernyataan SELECT, INSERT, UPDATE dan DELETE diperlukan untuk membuat kunci asing.
  • Kunci asing dapat dibuat dengan dua cara. Satu dengan menggunakan pernyataan CREATE dan lainnya dengan menggunakan pernyataan ALTER.

Prasyarat:

Sebelum membuat batasan kunci asing, Anda harus membuat database dan tabel induk dengan kunci utama. Misalkan nama database adalah ' Perpustakaan ' dan itu berisi dua tabel induk bernama ' buku ' dan ' peminjam '. Buat koneksi dengan server MySQL menggunakan mysql klien dan jalankan pernyataan SQL berikut untuk membuat database dan tabel.



MEMBUAT DATABASE Perpustakaan;
MENGGUNAKAN Perpustakaan;

MEMBUAT MEJA buku(
Indo INT BUKAN BATAL AUTO_INCREMENT ,
judul varchar (lima puluh) BUKAN BATAL ,
Pengarang varchar (lima puluh) BUKAN BATAL ,
penerbit varchar (lima puluh) BUKAN BATAL ,
KUNCI UTAMA (Indo)
) MESIN = INNODB ;

MEMBUAT MEJA peminjam(
Indo VARCHAR (lima puluh) BUKAN BATAL ,
nama varchar (lima puluh) BUKAN BATAL ,
alamat varchar (lima puluh) BUKAN BATAL ,
surel varchar (lima puluh) BUKAN BATAL ,
KUNCI UTAMA (Indo)
) MESIN = INNODB ;



Tentukan Batasan Kunci Asing menggunakan pernyataan CREATE

Buat tabel bernama ' buku_pinjam_info ' dengan batasan kunci asing dengan mengeksekusi pernyataan berikut. Di sini, buku_id lapangan adalah kunci asing untuk tabel ini dan setiap nilai bidang ini harus ada di Indo bidang buku meja. buku adalah tabel induk dan buku_pinjam_info adalah tabel anak. Dua batasan juga diatur dengan kunci asing di sini. Ini adalah HAPUS CASCADE dan UPDATE CASCADE . Itu berarti jika ada kunci utama yang akan dihapus atau diperbarui dari tabel induk, maka catatan terkait yang terkait dengan tabel anak yang terkait dengan kunci asing akan dihapus atau kunci asing akan diperbarui.





MEMBUAT MEJA buku_pinjam_info(
pinjam_id VARCHAR (lima puluh),
buku_id INT ,
pinjam_tanggal TANGGAL BUKAN BATAL ,
tanggal pengembalian TANGGAL BUKAN BATAL ,
status VARCHAR (limabelas) BUKAN BATAL ,
INDEKS par_ind(buku_id),
KUNCI UTAMA (pinjam_id,pinjam_tanggal),
KUNCI ASING (buku_id) REFERENSI buku(Indo)
PADA MENGHAPUS RIAM
PADA MEMPERBARUI RIAM
) MESIN = INNODB ;

Sekarang, jalankan pernyataan SQL berikut untuk menyisipkan beberapa catatan di kedua tabel. Pernyataan INSERT pertama akan memasukkan empat record ke dalam buku meja. Empat nilai dari Indo bidang buku tabel akan menjadi 1, 2, 3 dan 4 untuk atribut kenaikan otomatis. Pernyataan INSERT kedua akan memasukkan empat record ke dalam buku_pinjam_info berdasarkan Indo Nilai dari buku meja.



MEMASUKKAN KE DALAM buku NILAI
( BATAL , 'Untuk membunuh mockingbird', 'Harper Lee', 'Penerbitan Pusat Agung'),
( BATAL , 'Seratus Tahun Kesunyian', 'Garcia Marquez', 'Lutfi Ozkok'),
( BATAL , 'Sebuah Jalan Menuju India', 'Forster, E.M.', 'Perpustakaan Gambar BBC Hulton'),
( BATAL , 'Manusia tak terlihat', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

MEMASUKKAN KE DALAM buku_pinjam_info NILAI
('123490', 1, '2020-02-15', '2020-02-25', 'Kembali'),
('157643', 2, '2020-03-31', '2020-03-10', 'Tertunda'),
('174562', 4, '2020-04-04', '2020-04-24', 'Dipinjam'),
('146788', 3, '2020-04-10', '2020-01-20', 'Dipinjam');

Jika Anda mencoba memasukkan nilai di bidang kunci asing tabel anak yang tidak ada di bidang kunci utama tabel induk maka MySQL akan menghasilkan kesalahan. Pernyataan SQL berikut akan menghasilkan kesalahan karena tabel induk, buku tidak mengandung nilai id apa pun 10 .

MEMASUKKAN KE DALAM buku_pinjam_info NILAI
('195684', 10, '2020-04-15', '2020-04-30', 'Kembali');

Setelah mengeksekusi pernyataan DELETE berikut, ketika record keempat akan dihapus dari buku tabel kemudian catatan terkait dari buku_pinjam_info tabel akan dihapus secara otomatis untuk batasan kunci asing.

MENGHAPUS DARI buku DI MANA Indo= 4;
PILIH * dari buku;
PILIH * dari buku_pinjam_info;

Tentukan Batasan Kunci Asing menggunakan pernyataan ALTER

Pada awalnya, masukkan beberapa catatan ke dalam peminjam tabel dan tabel ini akan didefinisikan sebagai tabel induk di berikutnya USIA penyataan.

MEMASUKKAN KE DALAM peminjam NILAI
('123490', 'Patrick Kayu', '34 Jalan Barat LANCASTER LA14 9ZH', ' [dilindungi email] '),
('157643', 'Ezra Martin', '10 Hutan BIRMINGHAM B98 1EU', ' [dilindungi email] '),
('174562', 'John Innes Archie', '55 Jalan Utama LIVERPOOL L2 3OD', ' [dilindungi email] '),
('146788', 'Frederick Hanson', '85 Highfield Road SHREWSBURY SY46 3ME', ' [dilindungi email] ');

Jalankan yang berikut ini USIA pernyataan untuk menetapkan batasan kunci asing lainnya untuk buku_pinjam_info tabel untuk membuat hubungan dengan peminjam meja. Di Sini, pinjam_id didefinisikan sebagai kunci asing untuk buku_pinjam_info meja.

ALTER TABLE book_borrow_info ADD CONSTRAINT fk_borrower
KUNCI ASING(pinjam_id)REFERENSI peminjam(Indo)ON DELETE CASCADE PADA PEMBATASAN UPDATE;

Sekarang, masukkan catatan ke dalam buku_pinjam_info dengan valid pinjam_id nilai yang ada di Indo bidang peminjam meja. 157643 nilai ada di tabel peminjam dan pernyataan INSERT berikut akan berhasil dijalankan.

MEMASUKKAN KE DALAM buku_pinjam_info NILAI
('157643', 1, '2020-03-10', '2020-03-20', 'Kembali');

Pernyataan INSERT berikut akan menghasilkan pesan kesalahan karena nilai id 195680 tidak ada di tabel peminjam.

MEMASUKKAN KE DALAM buku_pinjam_info NILAI
('195680', 1, '2020-04-15', '2020-04-30', 'Kembali');

Kesimpulan:

Mendefinisikan batasan kunci asing dengan benar adalah tugas yang sangat penting untuk membuat database relasional dan mengelola data di antara tabel dengan tepat. Mengetahui penggunaan batasan kunci asing sangat penting bagi perancang basis data. Saya harap artikel ini akan membantu perancang basis data baru untuk memahami konsep batasan kunci asing dan menerapkannya dengan benar dalam tugas mereka.