غالبًا ما نواجه هذا الموقف في قاعدة البيانات: الجدول الرئيسي A والجدول الفرعي B. يحتوي الجدول B على المفتاح الأساسي للجدول A كمفتاح خارجي. عندما نريد إدراج بيانات، سنقوم أولاً بإدراجها في الجدول أ، ثم نحصل على هوية الجدول أ، ثم ندرجها في الجدول ب. إذا كنت تريد إجراء عملية حذف، فاحذف الجدول الفرعي B أولاً، ثم احذف الجدول الرئيسي A. في البرمجة يتم إتمام العمليات على الجدولين في معاملة واحدة.
عند استخدام النظام بشكل متكرر، قد تحدث عمليات الإدراج والحذف في نفس الوقت. في هذا الوقت، ستضع معاملة الإدراج أولاً قفلًا حصريًا على الجدول الرئيسي A، ثم الوصول إلى الجدول الفرعي B. وفي الوقت نفسه، ستضع معاملة الحذف قفلًا حصريًا على الجدول الفرعي B، ثم الوصول إلى الجدول الرئيسي أ. ستحتكر معاملة الإدراج دائمًا الجدول A، في انتظار الوصول إلى الجدول B، وستحتكر معاملة الحذف أيضًا الجدول B، في انتظار الوصول إلى الجدول A. لذلك، تحتكر المعاملتان جدولًا لبعضهما البعض، في انتظار تحرير الطرف الآخر الموارد، مما يسبب حالة من الجمود.
لقد سمعت عن ثلاث طرق للقيام بذلك:
1. قم بإلغاء علاقة المفتاح الخارجي بين الجدولين AB، بحيث عند حذف البيانات، يمكنك أولاً حذف الجدول الرئيسي A، ثم حذف الجدول الفرعي B، بحيث تسلسل الوصول إلى المعاملات لهاتين العمليتين في الجدول متسق.
2 قبل حذف البيانات الموجودة في الجدول أ، استخدم أولاً معاملة لتوجيه المفتاح الخارجي ذي الصلة في الجدول ب إلى بيانات أخرى في الجدول أ (على سبيل المثال، قم بإنشاء صف من البيانات في الجدول أ وتعيين المفتاح الأساسي على 0. هذا الصف لن يتم الوصول إلى البيانات مطلقًا. قم بإجراء عملية حذف)، وبالتالي إزالة العلاقة بين البيانات المراد حذفها في الجدولين AB. ثم يمكنك استخدام معاملة الحذف لحذف البيانات الموجودة في الجدول A أولاً، ثم حذف البيانات الموجودة في الجدول B لتحقيق وصول متسق إلى الجدول باستخدام معاملة الإدراج وتجنب حالة توقف تام.
3. في علاقة المفتاح الخارجي، قم بتعيين "قاعدة الحذف" على "متتالية"، بحيث تحتاج معاملة الحذف فقط إلى حذف الجدول الرئيسي A مباشرة، دون تشغيل الجدول الفرعي B. لأنه بعد تعيين قاعدة الحذف على التتالي، يتم حذف البيانات الموجودة في الجدول الرئيسي، ويتم أيضًا حذف جميع البيانات المرتبطة بالمفاتيح الخارجية في الجدول الفرعي في نفس الوقت.
الحلول الثلاثة المذكورة أعلاه كلها اقتراحات مقدمة من الزملاء، ولا أعرف الطريقة التي يجب استخدامها.
أتساءل عما إذا كانت هناك أي طرق جيدة أخرى لمنع الجمود في هذه الحالة؟
http://www.cnblogs.com/studyzy/archive/2007/06/11/779811.html