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

إدارة العروض القابلة للتحديث وقيد WITH CHECK OPTION في MySQLMySQL Managing Updatable Views and WITH CHECK OPTION

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

لا يقتصر دور العروض في MySQL 8.4 على القراءة فقط؛ بل يمكن للعرض أن يكون قابلاً للتحديث (Updatable View) يقبل أوامر التعديل UPDATE وINSERT وDELETE ويترجمها مباشرةً إلى الجدول الفيزيائي الأصلي. والشرط الهندسي الجوهري لقابلية العرض للتحديث هو وجود تطابق أحادي مباشر (1-to-1 Row Mapping) بين كل صف يظهر في العرض وصف واحد محدد في الجدول الأساسي.

لكي يقبل العرض إدراج صفوف جديدة عبر INSERT، يشترط أيضاً:

  • أن يتضمن العرض أسماء أعمدة جدول أساسي بسيطة دون تعبيرات حسابية مثل price * 1.15.
  • أن يشمل العرض جميع أعمدة الجدول الأساسي المقيدة بـ NOT NULL والتي لا تملك قيمة افتراضية DEFAULT.
  • يمكنك التحقق برمجياً من قابلية أي عرض للتحديث عبر استعلام العمود IS_UPDATABLE في جدول النظام information_schema.VIEWS.
مخطط إدارة العروض القابلة للتحديث وقيد WITH CHECK OPTION في MySQL
SQL
UPDATE v_riyadh_branches SET manager_name = 'Fahad Al-Otaibi' WHERE branch_id = 10;

متى يصبح العرض للقراءة فقط (Read-Only View) ويرفض أوامر التعديل؟ بمجرد أن يحتوي استعلام العرض على أي بنية SQL تدمج عدة صفوف في صف واحد أو تولّد قيماً مشتقة لا يمكن عكسها إلى صف أصلي محدد، يمنع MySQL التحديث ويُطلق الخطأ ERROR 1288 (HY000): The target table of the UPDATE is not updatable.

أبرز الموانع التي تجعل العرض غير قابل للتحديث:

  • دوال التجميع والتلخيص: مثل SUM() وCOUNT() وAVG() وMIN() وMAX().
  • عبارات التجميع والتكرار: وجود DISTINCT أو GROUP BY أو HAVING.
  • عمليات المجموعات والنوافذ: وجود UNION أو UNION ALL أو دوال النوافذ OVER (...) أو الاستعلامات الفرعية في بند FROM.
SQL
SELECT Table_name, Is_updatable FROM information_schema.VIEWS WHERE ...;

محاكي تحديث العروض وقيد WITH CHECK OPTION

تخيّل عرضاً باسم 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;

يسمح MySQL ببناء عرض فوق عرض آخر (Nested Views). وعند تداخل العروض تبرز أهمية تحديد نطاق الفحص في جملة WITH [CASCADED | LOCAL] CHECK OPTION:

  • WITH CASCADED CHECK OPTION (الافتراضي): إذا كتبت WITH CHECK OPTION بدون كلمة إضافية، يعتمد MySQL الوضع المتسلسل CASCADED، فيتحقق من شرط WHERE في العرض الأعلى بالإضافة إلى شروط جميع العروض الأدنى التي يعتمد عليها حتى لو لم يُكتب فيها قيد فحص.
  • WITH LOCAL CHECK OPTION: يفحص شرط WHERE الخاص بالعرض الحالي فقط، ولا يفحص العروض الأدنى إلا إذا كانت هي نفسها معرّفة بقيد فحص صريح.
SQL
CREATE OR REPLACE VIEW v_paid_high_orders AS ... WITH CASCADED CHECK OPTION;

كيف ينفذ محرك MySQL استعلام العرض داخلياً؟ يمكنك التحكم في طريقة المعالجة عبر تحديد الخوارزمية ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE} عند إنشاء العرض:

  • ALGORITHM = MERGE: يدمج MySQL نص استعلامك الخارجي مع استعلام العرض في جملة واحدة تنفذ مباشرةً على الجدول الأساسي (Query Rewriting). تتميز هذه الخوارزمية بأعلى سرعة وأقل استهلاك للذاكرة، وتسمح بتحديث البيانات عبر العرض.
  • ALGORITHM = TEMPTABLE: ينفذ المحرك استعلام العرض أولاً ويخزن نتائجه في جدول مؤقت داخلي، ثم ينفذ استعلامك الخارجي فوق الجدول المؤقت. تُفرض هذه الخوارزمية تلقائياً عند وجود GROUP BY أو DISTINCT أو UNION، وتجعل العرض غير قابل للتحديث دائماً.
  • ALGORITHM = UNDEFINED (الافتراضي): يترك القرار لمحسّن MySQL، والذي يفضّل MERGE دائماً متى ما سمحت بنية الاستعلام بذلك.
SQL
CREATE OR REPLACE ALGORITHM = MERGE VIEW v_fast_active_products AS ...;

يلخّص الجدول المرجعي التالي قواعد قابلية العروض للتحديث في MySQL 8.4، ومقارنة خوارزميات المعالجة، وخيارات فحص الشروط:

البنية / الخيارالصيغة في MySQL 8.4قابلية التحديثالسلوك الهندسي
عرض بسيط (1-to-1)ALGORITHM = MERGEنعم (YES)يدمج الاستعلام مباشرةً مع الجدول الأساسي
عرض تجميعي أو مميزGROUP BY / DISTINCT / UNIONلا (NO)يُعالج عبر TEMPTABLE ويرفض التعديل بالخطأ 1288
فحص النطاق المتسلسلWITH CASCADED CHECK OPTIONنعم (مشروطة)يفحص شرط العرض الحالي وجميع العروض الأدنى (الافتراضي)
فحص النطاق المحليWITH LOCAL CHECK OPTIONنعم (مشروطة)يفحص شرط العرض الحالي والعروض المقيدة صراحةً فقط
فحص صلاحية التحديثinformation_schema.VIEWSعمود IS_UPDATABLEيعرض YES أو NO لكل عرض مسجل
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس شروط قابلية العرض للتحديث (1-to-1 Mapping)، والموانع التي تجعل العرض للقراءة فقط، وكيفية منع اختفاء الصفوف عبر WITH CHECK OPTION، والفرق بين CASCADED وLOCAL، وخوارزميتي MERGE وTEMPTABLE.

الخطوة التالية والدرس القادم

في الوحدة القادمة ننتقل إلى عالم فهارس الأداء (MySQL Indexes) لنفهم بنية شجرة البحث المتوازنة B+Tree والمفتاح العنقودي وتكلفة الفحص الكامل للجدول.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Updatable Views تحديث العروض
تعلّم إدارة العروض القابلة للتحديث وقيد WITH CHECK OPTION في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
للمراجعة
02 When Is a View Updatable شروط قابلية العرض للتحديث
المفهوم الهندسي الأساسي وقواعد التنفيذ العملي لقسم شروط قابلية العرض للتحديث في قواعد بيانات MySQL 8.4 الحديثة.
للمراجعة
03 Constructs Blocking View Updates موانع التعديل عبر العرض
المفهوم الهندسي الأساسي وقواعد التنفيذ العملي لقسم موانع التعديل عبر العرض في قواعد بيانات MySQL 8.4 الحديثة.
للمراجعة
04 Preventing Vanishing Rows CHECK حماية الصفوف بـ CHECK OPTION
المفهوم الهندسي الأساسي وقواعد التنفيذ العملي لقسم حماية الصفوف بـ CHECK OPTION في قواعد بيانات MySQL 8.4 الحديثة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات2

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 2 مفهومةأول بطاقة، أول خطوة
01 DML DML
Data Manipulation Language
لغة معالجة البيانات (أوامر INSERT وUPDATE وDELETE وSELECT).
للمراجعة
02 MERGE MERGE
View Query Merge Processing Algorithm
خوارزمية دمج استعلام العرض مع الاستعلام الخارجي مباشرة على الجدول الأساسي.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. افتح عميل MySQL 8.4 المحلي ونفّذ استعلام SQL المشروح في قسم شروط قابلية العرض للتحديث للتحقق من النتائج.

  2. بدّل بين السيناريوهات الثلاثة في المحاكي التفاعلي ضمن قسم موانع التعديل عبر العرض وقارن مخرجات MySQL 8.4.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

4أسئلة 1أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي4 أسئلة تنتظرك
01

ما هو الشرط الهندسي الأساسي لكي يكون العرض الافتراضي قابلاً للتحديث في MySQL؟

اختر الإجابة الأدق وفق قواعد محرك MySQL 8.4.

02

ماذا يمنع قيد WITH CHECK OPTION عند إدراج أو تحديث الصفوف عبر العرض؟

اختر الإجابة الأدق وفق قواعد محرك MySQL 8.4.

03

أي بنية برمجية داخل استعلام العرض تجعل العرض غير قابل للتحديث (للقراءة فقط)؟

اختر الإجابة الأدق وفق قواعد محرك MySQL 8.4.

04

ما هو النطاق الافتراضي الذي يعتمده MySQL عند كتابة WITH CHECK OPTION دون تحديد LOCAL أو CASCADED؟

اختر الإجابة الأدق وفق قواعد محرك MySQL 8.4.