Cara menggunakan Kekangan Asing MySQL

How Use Mysql Foreign Key Constraints



Kekangan kunci asing digunakan untuk membuat hubungan antara dua jadual dalam pangkalan data MySQL. Ini adalah ciri yang sangat penting dari MySQL untuk menetapkan pelbagai jenis sekatan pada jadual yang berkaitan. Untuk menentukan kekangan kunci asing untuk sebarang jadual, anda harus menggunakan kunci utama jadual lain. Kunci utama adalah kunci unik untuk jadual untuk mengenal pasti baris tertentu dalam jadual dan apabila kunci utama ini digunakan ke dalam jadual lain untuk membuat hubungan satu-ke-satu atau satu-ke-banyak atau banyak-ke-banyak maka dipanggil kunci asing. Ciri-ciri kunci asing dan bagaimana kunci ini dapat digunakan dalam jadual MySQL ditunjukkan dalam artikel ini.

Ciri Kekangan Utama Asing:

Beberapa ciri penting dari kekangan kunci asing dijelaskan di bawah.







  • Jenis data kunci asing yang digunakan dalam jadual anak mesti sama dengan jenis data kunci utama yang digunakan dalam jadual induk untuk merujuk kunci asing.
  • Sebarang lajur indeks atau beberapa lajur boleh dirujuk sebagai kunci asing untuk jadual InnoDB sahaja.
  • Keistimewaan rujukan atau sekurang-kurangnya salah satu keistimewaan dari pernyataan SELECT, INSERT, UPDATE dan DELETE diperlukan untuk membuat kunci asing.
  • Kunci asing boleh dibuat dengan dua cara. Satu dengan menggunakan pernyataan CREATE dan yang lain dengan menggunakan pernyataan ALTER.

Prasyarat:

Sebelum membuat kekangan kunci asing, anda harus membuat pangkalan data dan jadual induk dengan kunci utama. Katakan nama pangkalan data adalah ' perpustakaan 'Dan mengandungi dua jadual induk bernama' buku 'Dan' peminjam '. Buat sambungan dengan pelayan MySQL menggunakan mysql pelanggan dan jalankan penyataan SQL berikut untuk membuat pangkalan data dan jadual.



BUAT PANGKALAN DATA perpustakaan;
PENGGUNAAN perpustakaan;

BUAT JADUAL buku(
ID INT TIDAK BULAN AUTO_INCREMENT ,
tajuk varchar (lima puluh) TIDAK BULAN ,
pengarang varchar (lima puluh) TIDAK BULAN ,
penerbit varchar (lima puluh) TIDAK BULAN ,
KUNCI UTAMA (ID)
) KEJURUTERAAN = INNODB ;

BUAT JADUAL peminjam(
ID VARCHAR (lima puluh) TIDAK BULAN ,
nama varchar (lima puluh) TIDAK BULAN ,
alamat varchar (lima puluh) TIDAK BULAN ,
e-mel varchar (lima puluh) TIDAK BULAN ,
KUNCI UTAMA (ID)
) KEJURUTERAAN = INNODB ;



Tentukan Kekangan Asing menggunakan pernyataan CREATE

Buat jadual bernama ' book_borrow_info 'Dengan kekangan kunci asing dengan melaksanakan pernyataan berikut. Di sini, buku_id bidang adalah a kunci asing untuk jadual ini dan setiap nilai bidang ini mesti ada di ID bidang buku meja. buku adalah jadual induk dan book_borrow_info adalah meja kanak-kanak. Dua sekatan juga ditetapkan dengan kunci asing di sini. Ini adalah HAPUSKAN CASCADE dan KEMASKINI KEMAS . Ini bermaksud jika ada kunci utama yang akan dikeluarkan atau dikemas kini dari jadual induk maka rekod yang berkaitan dengan jadual anak yang berkaitan dengan kunci asing akan dikeluarkan atau kunci asing akan dikemas kini.





BUAT JADUAL book_borrow_info(
pinjam_id VARCHAR (lima puluh),
buku_id INT ,
pinjam_ tarikh TARIKH TIDAK BULAN ,
tarikh_pulangan TARIKH TIDAK BULAN ,
status VARCHAR (lima belas) TIDAK BULAN ,
INDEKS par_ind(buku_id),
KUNCI UTAMA (pinjam_id,pinjam_ tarikh),
KUNCI ASING (buku_id) RUJUKAN buku(ID)
HIDUP HAPUS CASCADE
HIDUP KEMASKINI CASCADE
) KEJURUTERAAN = INNODB ;

Sekarang, jalankan pernyataan SQL berikut untuk memasukkan beberapa rekod dalam kedua-dua jadual. Penyataan INSERT pertama akan memasukkan empat rekod ke dalam buku meja. Empat nilai dari ID bidang buku jadual akan menjadi 1, 2, 3 dan 4 untuk atribut kenaikan automatik. Penyataan INSERT kedua akan memasukkan empat rekod ke dalam book_borrow_info berdasarkan pada ID nilai buku meja.



MASUKKAN KE DALAM buku NILAI
( BULAN , 'Untuk Membunuh Burung Mockingbird', 'Harper Lee', 'Penerbitan Grand Central'),
( BULAN , 'Seratus Tahun Kesendirian', 'Garcia Marquez', 'Lutfi Ozkok'),
( BULAN , 'Laluan ke India', 'Forster, E.M.', 'Perpustakaan Gambar BBC Hulton'),
( BULAN , 'Orang halimunan', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

MASUKKAN KE DALAM book_borrow_info NILAI
('123490', 1, '2020-02-15', '2020-02-25', 'Dikembalikan'),
('157643', 2, '2020-03-31', '2020-03-10', 'Yang belum selesai'),
('174562', 4, '2020-04-04', '2020-04-24', 'Dipinjam'),
('146788', 3, '2020-04-10', '2020-01-20', 'Dipinjam');

Sekiranya anda cuba memasukkan nilai di medan kunci asing pada jadual anak yang tidak ada di medan kunci utama jadual induk, maka MySQL akan menghasilkan ralat. Pernyataan SQL berikut akan menghasilkan ralat kerana jadual induk, buku tidak mengandungi nilai id 10 .

MASUKKAN KE DALAM book_borrow_info NILAI
('195684', 10, '2020-04-15', '2020-04-30', 'Dikembalikan');

Setelah melaksanakan pernyataan DELETE berikut, apabila catatan keempat akan dikeluarkan dari buku jadual kemudian rekod yang berkaitan dari book_borrow_info jadual akan dikeluarkan secara automatik kerana kekangan kunci asing.

HAPUS DARI buku DI MANA ID= 4;
PILIH * dari buku;
PILIH * dari book_borrow_info;

Tentukan Kekangan Asing menggunakan pernyataan ALTER

Pada mulanya, masukkan beberapa rekod ke dalam peminjam jadual dan jadual ini akan ditakrifkan sebagai jadual induk di sebelah UMUR penyataan.

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

Jalankan perkara berikut UMUR penyataan untuk menetapkan kekangan kunci asing lain untuk book_borrow_info jadual untuk membuat hubungan dengan peminjam meja. Di sini, pinjam_id ditakrifkan sebagai kunci asing untuk book_borrow_info meja.

ALTER TABLE book_borrow_info TAMBAHKAN CONSTRAINT fk_borrower
KUNCI ASING(pinjam_id)RUJUKAN peminjam(ID)PADA HAPUS CASCADE PADA TERHAD KEMASKINI;

Sekarang, masukkan rekod ke book_borrow_info dengan sah pinjam_id nilai yang wujud dalam ID bidang peminjam meja. 157643 nilai ada dalam jadual peminjam dan penyataan INSERT berikut akan dilaksanakan dengan jayanya.

MASUKKAN KE DALAM book_borrow_info NILAI
('157643', 1, '2020-03-10', '2020-03-20', 'Dikembalikan');

Penyataan INSERT berikut akan menghasilkan mesej ralat kerana nilai id 195680 tidak wujud dalam jadual peminjam.

MASUKKAN KE DALAM book_borrow_info NILAI
('195680', 1, '2020-04-15', '2020-04-30', 'Dikembalikan');

Kesimpulan:

Mendefinisikan kekangan kunci asing dengan betul adalah tugas yang sangat penting untuk membuat pangkalan data hubungan dan menguruskan data di antara jadual dengan tepat. Mengetahui penggunaan kekangan kunci asing sangat penting bagi pereka pangkalan data. Saya harap artikel ini dapat membantu pereka pangkalan data baru untuk memahami konsep kekangan kunci asing dan menerapkannya dengan betul dalam tugas mereka.