Kunci Asas SQL Asing VS Dijelaskan dengan Contoh Sintaks MySQL

Kunci Asing adalah kunci yang digunakan untuk menghubungkan dua jadual. Jadual dengan Kekangan Kunci Asing (aka "meja anak") disambungkan ke meja lain (aka, "jadual ibu bapa"). Hubungannya adalah antara Kekangan Kunci Asing meja anak dan Kunci Utama meja induk.

Kekangan Kunci Asing digunakan untuk membantu mengekalkan konsistensi antara jadual. Sebagai contoh, jika rekod jadual induk dihapus dan jadual anak mempunyai rekod, sistem juga dapat menghapus rekod anak.

Mereka juga membantu mencegah memasukkan data yang tidak tepat di dalam tabel anak dengan mengharuskan adanya catatan jadual induk untuk setiap catatan yang dimasukkan ke dalam tabel anak.

Contoh penggunaan

Untuk panduan ini kami akan melihat lebih dekat jadual hubungan pelajar (ibu bapa) dan pelajar (anak).

Kunci utama jadual induk

Perhatikan bahawa jadual pelajar mempunyai kunci utama satu ruangan pelajarID.

SHOW index FROM student; 
+---------+------------+----------+--------------+-------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | +---------+------------+----------+--------------+-------------+ | student | 0 | PRIMARY | 1 | studentID | +---------+------------+----------+--------------+-------------+ 1 row in set (0.00 sec) (some columns removed on the right for clarity) 

Kunci utama dan asing meja kanak-kanak

Jadual maklumat hubungan pelajar mempunyai satu kunci utama yang juga merupakan ID pelajar. Ini kerana terdapat hubungan satu lawan satu antara dua jadual. Dengan kata lain, kami menjangkakan hanya satu pelajar dan satu rekod hubungan pelajar bagi setiap pelajar.

SHOW index FROM `student-contact-info`; 
+----------------------+------------+----------+--------------+-------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | +----------------------+------------+----------+--------------+-------------+ | student-contact-info | 0 | PRIMARY | 1 | studentID | +----------------------+------------+----------+--------------+-------------+ 1 row in set (0.00 sec) (some columns removed on the right for clarity) 
SELECT concat(table_name, '.', column_name) AS 'foreign key', concat(referenced_table_name, '.', referenced_column_name) AS 'references' FROM information_schema.key_column_usage WHERE referenced_table_name IS NOT NULL AND table_schema = 'fcc_sql_guides_database' AND table_name = 'student-contact-info'; 
+--------------------------------+-------------------+ | foreign key | references | +--------------------------------+-------------------+ | student-contact-info.studentID | student.studentID | +--------------------------------+-------------------+ 1 row in set (0.00 sec) 

Contoh laporan menggunakan jadual ibu bapa pelajar dan jadual anak hubungan

SELECT a.studentID, a.FullName, a.programOfStudy, b.`student-phone-cell`, b.`student-US-zipcode` FROM student AS a JOIN `student-contact-info` AS b ON a.studentID = b.studentID; 
+-----------+------------------------+------------------+--------------------+--------------------+ | studentID | FullName | programOfStudy | student-phone-cell | student-US-zipcode | +-----------+------------------------+------------------+--------------------+--------------------+ | 1 | Monique Davis | Literature | 555-555-5551 | 97111 | | 2 | Teri Gutierrez | Programming | 555-555-5552 | 97112 | | 3 | Spencer Pautier | Programming | 555-555-5553 | 97113 | | 4 | Louis Ramsey | Programming | 555-555-5554 | 97114 | | 5 | Alvin Greene | Programming | 555-555-5555 | 97115 | | 6 | Sophie Freeman | Programming | 555-555-5556 | 97116 | | 7 | Edgar Frank "Ted" Codd | Computer Science | 555-555-5557 | 97117 | | 8 | Donald D. Chamberlin | Computer Science | 555-555-5558 | 97118 | +-----------+------------------------+------------------+--------------------+--------------------+ 

Kesimpulannya

Kekangan Kunci Asing adalah alat integriti data yang hebat. Luangkan masa untuk mempelajarinya dengan baik.

Seperti semua perkara SQL ini, JAUH LEBIH BANYAK daripada mereka daripada apa yang terdapat dalam panduan pengenalan ini.

Saya harap ini sekurang-kurangnya memberi anda cukup untuk memulakan.

Sila lihat manual untuk pengurus pangkalan data anda dan selamat mencuba pilihan yang berbeza sendiri.