كيفية استخدام قيود المفاتيح الخارجية في MySQL

How Use Mysql Foreign Key Constraints



يتم استخدام قيد المفتاح الخارجي لإنشاء علاقة بين جدولين في قاعدة بيانات MySQL. إنها ميزة مهمة جدًا في MySQL لتعيين أنواع مختلفة من القيود على الجداول ذات الصلة. لتحديد أي قيد مفتاح خارجي لأي جدول ، يجب عليك استخدام المفتاح الأساسي لجدول آخر. المفتاح الأساسي هو مفتاح فريد لجدول لتعريف صف معين في الجدول وعندما يتم استخدام هذا المفتاح الأساسي في جدول آخر لإنشاء علاقة رأس برأس أو علاقة رأس بأطراف أو علاقة أطراف بأطراف يسمى المفتاح الخارجي. يتم عرض ميزات المفاتيح الخارجية وكيف يمكن استخدام هذه المفاتيح في جداول MySQL في هذه المقالة.

ميزات قيود المفاتيح الأجنبية:

يتم شرح بعض الميزات الهامة لتقييد المفتاح الخارجي أدناه.







  • يجب أن يكون نوع بيانات المفتاح الخارجي المستخدم في الجدول الفرعي هو نفسه مع نوع بيانات المفتاح الأساسي المستخدم في الجدول الأصل لإحالة المفتاح الخارجي.
  • يمكن الإشارة إلى أي عمود فهرس أو أعمدة متعددة كمفتاح خارجي لجدول InnoDB فقط.
  • امتيازات المراجع أو على الأقل أحد امتيازات عبارات SELECT و INSERT و UPDATE و DELETE مطلوبة لإنشاء مفتاح خارجي.
  • يمكن إنشاء مفتاح خارجي بطريقتين. أحدهما باستخدام عبارة CREATE والآخر باستخدام عبارة ALTER.

المتطلبات المسبقة:

قبل إنشاء قيد مفتاح خارجي ، يجب عليك إنشاء قاعدة بيانات وجدول أصلي باستخدام المفتاح الأساسي. افترض أن اسم قاعدة البيانات هو مكتبة 'ويحتوي على جدولين أصليين باسم' كتب ' و ' مستعير '. قم بإجراء اتصال مع خادم MySQL باستخدام ملف mysql العميل وتشغيل جمل SQL التالية لإنشاء قاعدة البيانات والجداول.



يزيد قاعدة البيانات مكتبة؛
استعمال مكتبة؛

يزيد طاولة الكتب(
هوية شخصية ذكاء ليس باطل زيادة تلقائية و
لقب فارشار (خمسون) ليس باطل و
مؤلف فارشار (خمسون) ليس باطل و
الناشر فارشار (خمسون) ليس باطل و
المفتاح الأساسي (هوية شخصية)
) محرك = إينودب ؛

يزيد طاولة المقترضين(
هوية شخصية فاركار (خمسون) ليس باطل و
اسم فارشار (خمسون) ليس باطل و
عنوان فارشار (خمسون) ليس باطل و
البريد الإلكتروني فارشار (خمسون) ليس باطل و
المفتاح الأساسي (هوية شخصية)
) محرك = إينودب ؛



حدد قيد المفتاح الخارجي باستخدام عبارة CREATE

أنشئ جدولاً باسم ' book_borrow_info 'مع قيود المفتاح الخارجي عن طريق تنفيذ العبارة التالية. هنا ، معرّف_الكتب المجال هو مفتاح غريب لهذا الجدول وكل قيمة في هذا الحقل يجب أن تكون موجودة في هوية شخصية مجال ال كتب طاولة. الكتب هو الجدول الأصل و book_borrow_info هي طاولة الطفل. يتم أيضًا تعيين قيدين مع المفتاح الخارجي هنا. وهذه هي حذف الحالة و تحديث CASCADE . هذا يعني أنه في حالة إزالة أي مفتاح أساسي أو تحديثه من الجدول الأصلي ، فستتم إزالة السجلات المقابلة المتعلقة بالجدول الفرعي المتعلق بالمفتاح الخارجي أو سيتم تحديث المفتاح الخارجي.





يزيد طاولة book_borrow_info(
معرّف الاقتراض فاركار (خمسون)و
معرّف_الكتب ذكاء و
استعارة_تاريخ تاريخ ليس باطل و
تاريخ العودة تاريخ ليس باطل و
الحالة فاركار (خمسة عشر) ليس باطل و
فهرس par_ind(معرّف_الكتب)و
المفتاح الأساسي (معرّف الاقتراضواستعارة_تاريخ)و
مفتاح غريب (معرّف_الكتب) المراجع كتب(هوية شخصية)
تشغيل حذف تتالي
تشغيل تحديث تتالي
) محرك = إينودب ؛

الآن ، قم بتشغيل جمل SQL التالية لإدراج بعض السجلات في كلا الجدولين. أول جملة INSERT ستدرج أربعة سجلات في الكتب طاولة. القيم الأربع لـ هوية شخصية مجال ال الكتب سيكون الجدول 1 و 2 و 3 و 4 لسمة الزيادة التلقائية. ستقوم عبارة INSERT الثانية بإدراج أربعة سجلات في book_borrow_info على أساس هوية شخصية قيمة ال كتب طاولة.



إدراج إلى كتب القيم
( باطل و 'لقتل الطائر المحاكي'و 'هاربر لي'و 'جراند سنترال للنشر')و
( باطل و 'مائة عام من العزلة'و 'جارسيا ماركيز'و 'لطفي أوزكوك')و
( باطل و ممر إلى الهندو 'فورستر ، إي إم'و مكتبة صور بي بي سي هولتون)و
( باطل و 'الرجل الخفي'و 'رالف إليسون'و 'Encyclopædia Britannica، Inc.')؛

إدراج إلى book_borrow_info القيم
('123490'و 1و '2020-02-15'و '2020-02-25'و 'عاد')و
('157643'و 2و '2020-03-31'و '2020-03-10'و 'قيد الانتظار')و
('174562'و 4و '2020-04-04'و '2020-04-24'و 'اقترضت، استعارت')و
('146788'و 3و '2020-04-10'و '2020-01-20'و 'اقترضت، استعارت')؛

إذا حاولت إدخال قيمة في حقل المفتاح الخارجي للجدول الفرعي غير موجودة في حقل المفتاح الأساسي للجدول الأصلي ، فإن MySQL ستنشئ خطأ. ستؤدي عبارة SQL التالية إلى ظهور خطأ لأن الجدول الأصل ، الكتب لا يحتوي على أي قيمة معرّف 10 .

إدراج إلى book_borrow_info القيم
('195684'و 10و '2020-04-15'و '2020-04-30'و 'عاد')؛

بعد تنفيذ عبارة الحذف التالية ، عندما يتم إزالة السجل الرابع من كتب الجدول ثم السجلات ذات الصلة من book_borrow_info ستتم إزالة الجدول تلقائيًا لقيد المفتاح الخارجي.

حذف من عند الكتب أين هوية شخصية= 4؛
تحديد * من عند الكتب؛
تحديد * من عند book_borrow_info؛

قم بتعريف قيد المفتاح الخارجي باستخدام جملة ALTER

في البداية ، أدخل بعض السجلات في المقترضين الجدول وهذا الجدول سيتم تعريفه كجدول أصل في التالي سن بيان.

إدراج إلى المقترضين القيم
('123490'و باتريك وودو '34 ويست ستريت لانكاستر LA14 9ZH 'و '[بريد إلكتروني محمي]')و
('157643'و 'عزرا مارتن'و '10 ذا غروف برمنغهام B98 1EU'و '[بريد إلكتروني محمي]')و
('174562'و 'جون اينيس ارشي'و '55 الطريق الرئيسي ليفربول L2 3OD'و '[بريد إلكتروني محمي]')و
('146788'و 'فريدريك هانسون'و '85 Highfield Road SHREWSBURY SY46 3ME'و '[بريد إلكتروني محمي]')؛

قم بتشغيل ما يلي سن بيان لتعيين قيد مفتاح خارجي آخر لـ book_borrow_info الجدول لجعل العلاقة مع المقترضين طاولة. هنا، معرّف الاقتراض يتم تعريفه على أنه مفتاح خارجي لـ book_borrow_info طاولة.

ALTER TABLE book_borrow_info أضف CONSTRAINT fk_borrower
مفتاح غريب(معرّف الاقتراض)المراجع المقترضين(هوية شخصية)عند حذف الحالة عند تحديث قيد ؛

الآن ، أدخل سجلًا في book_borrow_info مع صالح معرّف الاقتراض القيمة الموجودة في هوية شخصية مجال ال المقترضين طاولة. 157643 القيمة موجودة في جدول المستعيرين وسيتم تنفيذ بيان INSERT التالي بنجاح.

إدراج إلى book_borrow_info القيم
('157643'و 1و '2020-03-10'و '2020-03-20'و 'عاد')؛

ستقوم عبارة INSERT التالية بإنشاء رسالة خطأ بسبب قيمة المعرف 195680 غير موجود في جدول المقترضين.

إدراج إلى book_borrow_info القيم
('195680'و 1و '2020-04-15'و '2020-04-30'و 'عاد')؛

استنتاج:

يعد تحديد قيود المفتاح الخارجي بشكل صحيح مهمة مهمة جدًا لإنشاء قاعدة بيانات علائقية وإدارة البيانات بين الجداول بشكل مناسب. تعد معرفة استخدامات قيود المفتاح الخارجي أمرًا ضروريًا جدًا لمصممي قواعد البيانات. آمل أن تساعد هذه المقالة مصممي قواعد البيانات الجدد على فهم مفهوم قيود المفتاح الخارجي وتطبيقها بشكل صحيح في مهامهم.