MySQL: إنشاء طرق عرض MySQL واستخدامها
آخر تحديث: 2026-08-26
الطريقة هي عبارة عن جدول افتراضي — فهي تجمع الاستعلامات المعقدة في واجهة بسيطة.
يتناول هذا الدرس إنشاء «طرق العرض» واستخدامها وإدارتها.
graph TB
A[How Views Work] --> B[CREATE VIEW DefinitionSQL]
B --> C[StorageSQLDefinition]
C --> D[When querying a view]
D --> E[Expand to the bottom layerSQL]
E --> F[Execute a query on the underlying table]
F --> G[Return Results]
B --> H[WITH CHECK OPTION]
H --> I[When modifying data<br/>Validate View Conditions]
1. ما ستتعلمه
- CREATE VIEW: إنشاء عرض
- الفرق بين «الطرق» و«الجداول»
- تعديل وحذف طرق العرض
- حالات استخدام «الطرق»
- مع خيار الشيك
2. سيناريوهات واقعية
(1) المشكلة: الكتابة المتكررة للاستعلامات المعقدة
غالبًا ما أحتاج إلى الاستعلام عن «إحصائيات الطلبات للعملاء النشطين»، لكن استعلام SQL هذا طويل جدًّا:
SQL
SELECT c.name, COUNT(o.id), SUM(o.amount)
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
WHERE c.status = 'active'
GROUP BY c.id;
لا بد لي من كتابته يدويًّا في كل مرة.
(2) حل مشكلة العرض
SQL
CREATE VIEW active_customer_orders AS
SELECT c.name, COUNT(o.id) AS order_count, SUM(o.amount) AS total_amount
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
WHERE c.status = 'active'
GROUP BY c.id;
-- Query the view directly in the future
SELECT * FROM active_customer_orders;
3. إنشاء عرض
▶ مثال: العرض الأساسي
SQL
-- Create a View
CREATE VIEW v_active_users AS
SELECT id, username, email, created_at
FROM users
WHERE status = 'active';
-- Using Views(Query like a table)
SELECT * FROM v_active_users;
SELECT * FROM v_active_users WHERE created_at >= '2026-01-01';
▶ مثال: طرق العرض المعقدة
SQL
-- Order Statistics View
CREATE VIEW v_order_stats AS
SELECT
c.id AS customer_id,
c.name AS customer_name,
COUNT(o.id) AS total_orders,
SUM(o.amount) AS total_amount,
AVG(o.amount) AS avg_amount,
MAX(o.order_date) AS last_order_date
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
GROUP BY c.id, c.name;
4. طرق العرض مقابل الجداول
| البعد | العرض | الجدول |
|---|---|---|
| تخزين البيانات | بدون تخزين (افتراضي) | يخزن البيانات الفعلية |
| التحديث | القيود (يمكن تحديثها في «العرض البسيط») | يمكن إضافتها أو حذفها أو تعديلها بحرية |
| الأداء | إعادة الحساب عند كل استعلام | القراءة مباشرة |
| الغرض | تبسيط الاستعلامات والتحكم في الوصول | تخزين البيانات |
5. تعديل وحذف طرق العرض
▶ مثال: عرض الإدارة
SQL
-- Edit View
ALTER VIEW v_active_users AS
SELECT id, username, email, phone, created_at
FROM users
WHERE status = 'active' AND email_verified = TRUE;
-- or use CREATE OR REPLACE
CREATE OR REPLACE VIEW v_active_users AS
SELECT id, username, email FROM users WHERE status = 'active';
-- Delete View
DROP VIEW IF EXISTS v_active_users;
-- View View Definition
SHOW CREATE VIEW v_active_users;
6. مع خيار الشيك
تأكد من أن البيانات التي تم تعديلها من خلال طريقة عرض ما لا تزال تستوفي معايير تلك الطريقة.
▶ مثال: خيار الفحص
SQL
CREATE VIEW v_active_users AS
SELECT * FROM users WHERE status = 'active'
WITH CHECK OPTION;
-- Allowed: status is active
UPDATE v_active_users SET username = 'new_name' WHERE id = 1;
-- Prohibited: After the revision status is no longer active, will be rejected
UPDATE v_active_users SET status = 'inactive' WHERE id = 1;
-- ERROR: CHECK OPTION failed
7. حالات استخدام «الطرق»
| السيناريو | الوصف |
|---|---|
| تبسيط الاستعلامات المعقدة | تغليف عمليات ربط الجداول المتعددة (JOIN) وتوفير واجهة بسيطة |
| التحكم في الوصول | عرض الحقول المحددة فقط للمستخدمين |
| تجريد البيانات | إخفاء التغييرات التي تطرأ على بنية الجدول الأساسية |
| إحصائيات التقارير | منطق إحصائي محدد مسبقًا |
▶ مثال: التحكم في الوصول
SQL
-- Create a view that contains only public information
CREATE VIEW v_user_public AS
SELECT id, username, avatar FROM users;
-- Grant only view permissions to regular users
GRANT SELECT ON mydb.v_user_public TO 'readonly_user'@'localhost';
❓ أسئلة شائعة
س هل يمكن إنشاء فهارس على طرق العرض؟
ج لا. طرق العرض هي جداول افتراضية لا تحتوي على مساحة تخزين فعلية. وتعتمد الاستعلامات التي تُجرى على طرق العرض على الفهارس الموجودة في الجداول الأساسية من أجل تحسين الأداء.
س هل يمكن تداخل العروض؟
ج نعم،
CREATE VIEW v2 AS SELECT * FROM v1. ومع ذلك، فإن التداخل المفرط قد يؤثر على الأداء.س هل البيانات المعروضة في طريقة العرض تُعرض في الوقت الفعلي؟
ج نعم. يتم إعادة حساب البيانات المعروضة من الجداول الأساسية مع كل استعلام، لذا فإنك ترى أحدث البيانات.
س هل تشغل طرق العرض مساحة تخزين؟
ج لا، لا تشغل. طرق العرض تخزن تعريف SQL فقط؛ ولا تخزن البيانات الفعلية.
س هل يمكن أن تحسّن «الطرق» الأداء؟
ج لا. «الطرق» هي مجرد «تسهيلات لغوية»؛ حيث يتم إعادة تنفيذ لغة SQL الأساسية مع كل استعلام. يجب أن يعتمد تحسين الأداء على الفهارس.
📖 ملخص
- الطرق هي جداول افتراضية لا تخزن البيانات؛ حيث يتم إعادة حسابها مع كل استعلام.
- CREATE VIEW لإنشاء عرض، ALTER VIEW لتعديل عرض، DROP VIEW لحذف عرض
- مع خيار التحقق يضمن أن التعديلات تستوفي شروط العرض
- التطبيقات: الاستعلامات المبسطة، التحكم في الوصول، تجريد البيانات، إعداد التقارير والتحليلات
📝 تمارين
-
مشكلة أساسية (مستوى الصعوبة: ⭐): أنشئ عرضًا يعرض فقط المعرّف واسم المستخدم والبريد الإلكتروني للمستخدمين النشطين.
-
تمرين متقدم (مستوى الصعوبة: ⭐⭐): أنشئ عرضًا إحصائيًا للطلبات يتضمن اسم العميل وعدد الطلبات والمبلغ الإجمالي.
-
التحدي (مستوى الصعوبة: ⭐⭐⭐): قم بتنفيذ التحكم في الوصول باستخدام طرق العرض؛ وأنشئ طريقة عرض للقراءة فقط وامنح حق الوصول لمستخدمين محددين.