انتقل إلى محتوى الدرس

Preventing Vanishing Rows CHECK حماية الصفوف بـ CHECK OPTION

تعلّم إدارة العروض القابلة للتحديث وقيد WITH CHECK OPTION في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

تخيّل عرضاً باسم v_riyadh_branches يحمل الشرط WHERE city = 'Riyadh'. إذا لم تضع قيد حماية على هذا العرض، فبإمكان المستخدم تنفيذ UPDATE v_riyadh_branches SET city = 'Jeddah' WHERE branch_id = 10! سينفذ MySQL التعديل في الجدول الأصلي، لكن المفاجأة أن الصف رقم 10 سيختفي فوراً من العرض (مشكلة الصفوف المتلاشية Vanishing Rows)، بل ويمكن للمستخدم إدراج فرع في مدينة الدمام عبر عرض فروع الرياض!

لإغلاق هذه الثغرة المنطقية، نُلحق العبارة WITH CHECK OPTION في نهاية تعريف العرض؛ فتلزم محرك MySQL بفحص كل عملية INSERT أو UPDATE والتأكد من أن الصف الناتج بعد التعديل لا يزال يحقق شرط WHERE الخاص بالعرض، وإلا يُرفض التعديل بالخطأ ERROR 1369 (HY000): CHECK OPTION failed.

SQL
CREATE OR REPLACE VIEW v_riyadh_branches AS ... WITH CHECK OPTION;