محتويات الدورة

MySQL / التطبيقات الموثوقة والاستعلامات التحليلية / الدرس 10

العروض وتعبيرات الجداول والتفكير التكراري

سمّ العلاقات الوسيطة دون افتراض أنها جداول مخبأة أوحواجز تحسين تلقائية.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اختر عرضاً أوجدولاً مشتقاً أو CTE حسب العمر المطلوب.
  • اكتب CTE تكرارية منتهية وافهم سياق الأمان.

امنح العلاقة اسماً مفيداً

استخدم صفوف المتجر الأصلية. يسمي الجدول المشتق استعلاماً داخل FROM وتسمي CTE علاقة لعبارة واحدة ويحفظ العرض تعريف استعلام لإعادة الاستخدام. تنظم الأدوات التفكير وتوفر أعمدة مستقرة، ولا تخزن أي منها تلقائياً نسخة دائمة من النتيجة. يجب أن يصف الاسم الحقيقة ومستوى الصف، مثل line_totals لكل طلب.

افصل تجميع التفاصيل عن المقارنة

تفيد CTE غير التكرارية حين يمر التقرير بمراحل مفهومية. احسب أولاً مجموعاً لكل طلب ثم اربطه بالملخص المخزن. قد يدمج MySQL العلاقات الوسيطة أويحققها حسب قواعد التحسين. ولا يضمن تكرار اسم CTE تكلفة معينة. افحص EXPLAIN ولا تساوِ بين المراحل المكتوبة ومراحل التنفيذ الفعلية.

sql مطابقة الإجماليات المخزنة والمحسوبة
WITH line_totals AS (
 SELECT order_id,SUM(quantity*unit_price) AS computed_total
 FROM order_items GROUP BY order_id
)
SELECT o.id,o.total,l.computed_total
FROM orders o JOIN line_totals l ON l.order_id=o.id
ORDER BY o.id;
الناتج المتوقع
id | total | computed_total
101 | 25.00 | 25.00
102 | 30.00 | 30.00
103 | 10.00 | 10.00

تنتج CTE صفاً لكل طلب فتمنع تضاعف البنود. تتطابق الطلبات الثلاثة:101 بقيمة 25.00 و 102 بقيمة 30.00 و 103 بقيمة 10.00. يخفي الربط الداخلي مجموعات البنود المفقودة؛ ويحتاج التدقيق الكامل إلى ربط أيسر واختبار غياب صريح.

انشر واجهة ضيقة قابلة لإعادة الاستخدام

يمكن للعرض إظهار رقم الطلب والعميل والإجمالي للطلبات المدفوعة فقط. فضّل أعمدة صريحة كي لا توسع إضافة عمود الواجهة فجأة. وقد لا تكون العروض المجمعة أوالمعقدة قابلة للتحديث. راجع SQL SECURITY DEFINER و INVOKER؛ إذ قد تمنح صلاحيات المنشئ عبر الكائن. لا يكون العرض حد أمان مقصوداً إلا بتصميم تعريفه ومنحه.

حدد البداية وقاعدة التوقف

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

sql علاقة تكرارية محدودة بالكامل
WITH RECURSIVE steps(n) AS (
 SELECT 1
 UNION ALL
 SELECT n+1 FROM steps WHERE n<3
)
SELECT n FROM steps ORDER BY n;
الناتج المتوقع
n
1
2
3

تنتج البداية 1 ثم الخطوة 2 ثم 3. وعند 3 يفشل الشرط فلا ينشأ صف إضافي. يحدد ORDER BY ترتيب العرض بصورة مستقلة عن تقييم التكرار. يشرح التسلسل الصغير الانتهاء دون افتراض شجرة غير موجودة في مخطط المتجر.

احترم النطاق والتوافق

لا يوجد اسم CTE إلا داخل عبارتها؛ ويحتاج SELECT لاحق إلى WITH جديدة أوعرض حقيقي. يدعم MySQL8.4 التكرار لكنه لا يوفر كل صياغات القواعد الأخرى. ولـ MariaDB قيود وميزات تكرار مستقلة، فتحقق قبل نسخ عبارات خاصة به. دوّن الإصدار مع الاستعلامات وافحص الهدف الفعلي قبل تجهيز الترحيل.

الأخطاء الشائعة وإصلاحها

ERROR 1146 (42S02) عند قراءة اسم CTE سابق.

لماذا يحدث؟
لا تضم العبارة الجديدة تعريف WITH ضمن نطاقها.
كيف تصلحه؟
كرر CTE أوأنشئ عرضاً مدروساً لإعادة الاستخدام.
كيف تتجنب تكراره؟
حدد عمر العلاقة ولا تعتبر CTE جدولاً مؤقتاً.

ERROR 3636 (HY000) أثناء التكرار.

لماذا يحدث؟
تجاوز الاستعلام حد العمق المضبوط.
كيف تصلحه؟
أصلح شرط التوقف أوكشف الدورة قبل التفكير في رفع الحد.
كيف تتجنب تكراره؟
برهن التقدم وحدد العمق المتوقع برسوم ممثلة.

ERROR 1406 (22001) داخل مسار نصي تكراري.

لماذا يحدث؟
استنتجت البداية نصاً أضيق من المسارات المضافة.
كيف تصلحه؟
حوّل البداية بـ CAST إلى CHAR أوسع مبرر واحتفظ بحد العمق.
كيف تتجنب تكراره؟
راجع نمو النوع كما تراجع انتهاء التكرار.

اختبر فهمك

1. اعرض الطلبات التي تختلف إجمالياتها المخزنة عن البنود؛ ماذا تظهر البيانات؟

اعرض الحل المشروح

أضف WHERE o.total <> l.computed_total للمثال الأول؛ لن تظهر صفوف لأن الثلاثة متطابقة. ولكشف غياب البنود أيضاً استخدم LEFT JOIN مع WHERE l.order_id IS NULL OR o.total <> l.computed_total.

2. مدد التسلسل إلى خمس قيم واشرح التوقف.

اعرض الحل المشروح

غيّر شرط التكرار إلى n < 5 فينتج 1 إلى 5، ولا يولد الصف 5 القيمة 6. أبق ORDER BY n للعرض. ولا حاجة إلى رفع حد العمق لأن قاعدة التوقف تحد العمل بالفعل.

أهم ما تعلمته

  • يحفظ العرض تعريفاً وتسمي CTE علاقة لعبارة واحدة.
  • تتطلب صحة التكرار تقدماً محدوداً وأنواعاً مناسبة.

المراجع الرسمية