في هذا الدرس 6تصفّح المواضيع
يُعرَّف العرض View في MySQL بأنه جدول افتراضي مسمّى (Virtual Table) يتكوّن محتواه من استعلام SELECT محفوظ داخل قاموس بيانات المحرك (Data Dictionary). وعلى خلاف الجداول الفيزيائية الأساسية (Base Tables) في محرك InnoDB، لا يحجز العرض مساحة تخزينية لنسخ الصفوف على القرص الصلب، بل يعيد تنفيذ الاستعلام الكامن خلفه لحظياً في كل مرة تقرأ فيها البيانات منه.
تُستخدم العروض في الأنظمة الإنتاجية لتحقيق ثلاثة أهداف هندسية رئيسية:
- تغليف الاستعلامات المعقدة (Query Encapsulation): اختصار عبارات الربط المتعددة
INNER JOINوLEFT JOINوالتجميعات في اسم منطقي واحد يسهل استدعاؤه من تطبيقات الواجهة الخلفية. - عزل طبقة التطبيق عن تغيرات المخطط (Schema Abstraction): إذا قُسِّم جدول كبير لاحقاً إلى جدولين، يمكنك تعديل تعريف العرض ليحافظ على نفس أسماء الأعمدة دون كسر كود التطبيق.
- توحيد منطق الأعمال (Single Source of Truth): بدلاً من تكرار معادلة حساب صافي الفاتورة أو حالة العميل النشط في عشرات الملفات البرمجية، تُكتب المعادلة مرة واحدة داخل العرض.
SELECT * FROM v_active_customers;
تتجلى القوة الحقيقية للأمر CREATE VIEW عندما تبني العرض فوق استعلام يربط عدة جداول (مثل ربط جدول الطلبات orders بجدول العملاء customers) مع حساب مجاميع مالية عبر دوال التجميع COUNT وSUM. كما يتيح لك MySQL تحديد أسماء صريحة لأعمدة العرض بين قوسين مباشرة بعد اسم العرض أو عبر الاسم المستعار AS داخل قائمة SELECT.
يشترط MySQL أن تكون أسماء الأعمدة داخل العرض فريدة تماماً؛ فإذا اشترك جدولان مربوطان في عمود يحمل الاسم id أو created_at، فيجب منح كل عمود اسماً مستعاراً مميزاً قبل حفظ العرض.
CREATE VIEW v_customer_order_totals (...) AS SELECT ...;
محاكي عروض البيانات التفاعلي
يُعدّ حجب الأعمدة الحساسة (Column-Level Projection & Masking) من أهم استخدامات العروض في بيئات الشركات. فجدول الموظفين الأساسي employees يحتوي عادةً على أعمدة سرية مثل الراتب الأساسي base_salary ورقم الآيبان البنكي iban_number وبصمة كلمة المرور، بينما تحتاج لوحة دليل الموظفين الداخلي إلى عرض الاسم والقسم والبريد المهني فقط.
يمكنك أيضاً دمج دوال النصوص والشرط مثل CONCAT وRIGHT وCASE داخل تعريف العرض لإخفاء جزء من البيانات الحساسة (Partial Masking) بدلاً من إزالتها بالكامل.
SELECT emp_id, full_name, masked_nid FROM v_employee_directory;
عندما تتغير متطلبات العمل وتحتاج إلى إضافة عمود جديد أو تعديل شرط التصفية داخل عرض موجود مسبقاً، فإن تنفيذ CREATE VIEW بنفس الاسم سيُرجع الخطأ ERROR 1050 (42S01): Table already exists. ولتجنب حذف العرض يدوياً ثم إعادة إنشائه، يوفر MySQL صيغتين قياسيتين لتحديث تعريف العرض في مكانه:
- صيغة
CREATE OR REPLACE VIEW: تنشئ العرض إذا لم يكن موجوداً، أو تستبدل تعريفه فوراً إذا كان موجوداً مسبقاً، وهي الصيغة الأكثر شيوعاً في ملفات الترحيل (Migrations). - صيغة
ALTER VIEW: تعدّل تعريف عرض موجود بالفعل، وتفشل برسالة خطأ واضحة إذا لم يكن العرض موجوداً في قاعدة البيانات.
CREATE OR REPLACE VIEW v_active_customers AS SELECT ...;
عند تنفيذ الأمر العادي SHOW TABLES، يعرض MySQL أسماء الجداول الفيزيائية والعروض الافتراضية معاً في قائمة واحدة. وللتمييز بينهما بدقة وفحص الكود المصدري لأي عرض أو حذفه عند انتهاء الحاجة إليه، نستخدم أدوات الفحص والإدارة التالية:
SHOW FULL TABLES WHERE Table_type = 'VIEW': يعرض قائمة العروض الافتراضية فقط مع عمود التصنيفVIEWفي مقابلBASE TABLE.SHOW CREATE VIEW view_name: يكشف نص استعلامSELECTالكامل المخزن داخل MySQL مع ترميز المحارف.DROP VIEW IF EXISTS view_name: يحذف تعريف العرض فقط من قاموس البيانات دون المساس بأي صف أو جدول من الجداول الأساسية.
SHOW FULL TABLES WHERE Table_type = 'VIEW';
يلخّص الجدول المرجعي التالي أوامر إدارة العروض الافتراضية في MySQL 8.4 ومزاياها وحدودها الهندسية عند تصميم قواعد البيانات:
| العنصر / الأمر | الصيغة القياسية | الوظيفة الأساسية | ملاحظة هندسية في MySQL 8.4 |
|---|---|---|---|
| إنشاء عرض جديد | CREATE VIEW v_name AS SELECT ... | حفظ استعلام كجدول افتراضي | لا يخزن بيانات مكررة على القرص |
| تحديث تعريف العرض | CREATE OR REPLACE VIEW v_name AS ... | استبدال بنية العرض ذرياً | يحافظ على استمرارية الاستعلامات المتزامنة |
| حجب الأعمدة الحساسة | SELECT safe_cols FROM base_tbl | إخفاء الرواتب والبيانات السرية | يدعم دمج دوال التقنيع مثل CONCAT وRIGHT |
| فحص العروض المسجلة | SHOW FULL TABLES WHERE Table_type='VIEW' | تمييز العروض عن الجداول الفيزيائية | يمكن فحص الكود عبر SHOW CREATE VIEW |
| حذف العرض بأمان | DROP VIEW IF EXISTS v_name | إزالة تعريف العرض من القاموس | لا يحذف أي صف من الجداول الأساسية |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تعلمت في هذا الدرس مفهوم العرض الافتراضي (View) في MySQL 8.4، وكيفية إنشائه بـ CREATE VIEW، وحجب الأعمدة الحساسة، وتحديث بنيته عبر CREATE OR REPLACE VIEW، وفحصه بـ SHOW FULL TABLES وحذفه بأمان بـ DROP VIEW IF EXISTS.
الخطوة التالية والدرس القادم
في الدرس القادم سنتعمق في إدارة العروض القابلة للتحديث (Updatable Views) وشروط تعديل البيانات عبر العرض وحماية الصفوف من الاختفاء غير المقصود.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Creating Views إنشاء العروض
- تعلّم إنشاء عروض البيانات Views والاستعلام منها في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
- للمراجعة
- 02 Concept of Virtual Saved Queries مفهوم العرض كجدول افتراضي
- المفهوم الهندسي الأساسي وقواعد التنفيذ العملي لقسم مفهوم العرض كجدول افتراضي في قواعد بيانات MySQL 8.4 الحديثة.
- للمراجعة
- 03 Creating Views with CREATE VIEW إنشاء العرض بـ CREATE VIEW
- المفهوم الهندسي الأساسي وقواعد التنفيذ العملي لقسم إنشاء العرض بـ CREATE VIEW في قواعد بيانات MySQL 8.4 الحديثة.
- للمراجعة
- 04 Hiding Sensitive Columns in Views حجب الأعمدة الحساسة بالعروض
- المفهوم الهندسي الأساسي وقواعد التنفيذ العملي لقسم حجب الأعمدة الحساسة بالعروض في قواعد بيانات MySQL 8.4 الحديثة.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات2
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 DDL DDL
- Data Definition Language
- لغة تعريف البيانات (وتشمل أوامر CREATE VIEW وALTER VIEW وDROP VIEW).
- للمراجعة
- 02 PII PII
- Personally Identifiable Information
- معلومات التعريف الشخصية الحساسة التي يُنصح بحجبها أو تقنيعها داخل عروض القراءة.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
افتح عميل MySQL 8.4 المحلي ونفّذ استعلام SQL المشروح في قسم مفهوم العرض كجدول افتراضي للتحقق من النتائج.
-
بدّل بين السيناريوهات الثلاثة في المحاكي التفاعلي ضمن قسم إنشاء العرض بـ CREATE VIEW وقارن مخرجات MySQL 8.4.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي4 أسئلة تنتظرك +
ماذا يخزن محرك MySQL 8.4 على القرص الصلب عند تنفيذ الأمر CREATE VIEW v_active_customers AS SELECT ...؟
اختر الإجابة الأدق وفق قواعد محرك MySQL 8.4.
أي عبارة SQL تحدّث تعريف عرض موجود مسبقاً بأمان دون الحاجة لحذفه يدوياً أولاً؟
اختر الإجابة الأدق وفق قواعد محرك MySQL 8.4.
أي أمر يعرض قائمة الجداول والعروض مع عمود Table_type للتمييز بين VIEW وBASE TABLE؟
اختر الإجابة الأدق وفق قواعد محرك MySQL 8.4.
ماذا يحدث لبيانات الجدول الأساسي عند تنفيذ الأمر DROP VIEW IF EXISTS v_active_customers؟
اختر الإجابة الأدق وفق قواعد محرك MySQL 8.4.