ما الفرق بين الـ Stored Procedure والـ Function في MySQL؟

تم النشر | بواسطة: Samar Shetiwy | Apr 22, 2026 | منذ 14 ساعة و44 دقيقة |
برمجه
| عدد المشاهدات: 140
ما الفرق بين الـ Stored Procedure والـ Function في MySQL؟

متى نكتب الكود داخل قاعدة البيانات؟

كمطورة باك إند، أحياناً يكون من الأفضل تنفيذ المنطق البرمجي (Logic) داخل قاعدة البيانات مباشرة بدلاً من كتابته في كود الموقع (PHP, Node.js, etc). هنا نلجأ لاستخدام الـ Stored Procedures والـ Functions.

كلاهما عبارة عن "مجموعة أوامر SQL" مخزنة مسبقاً، لكن الفرق بينهما يشبه الفرق بين "الموظف الذي يقوم بمهمة كاملة" و"الآلة الحاسبة التي تعطيكِ نتيجة فورية". دعونا نفكك هذا اللبس الشائع.


أولاً: الـ Stored Procedure (الموظف الشامل)

هو إجراء مخزن يمكنه القيام بعمليات معقدة وتغيير حالة البيانات بشكل كبير.

  • الهدف: تنفيذ سلسلة من الخطوات (مثل: إنشاء مستخدم، ثم إرسال تنبيه، ثم تحديث جدول الإحصائيات).

  • الإرجاع: يمكنه إرجاع قيم متعددة (عبر برامترات OUT) أو لا يرجع شيئاً على الإطلاق.

  • الاستدعاء: يتم استدعاؤه باستخدام كلمة CALL.

  • المرونة: يمكنكِ استخدامه لإجراء عمليات INSERT, UPDATE, DELETE.


ثانياً: الـ Function (الآلة الحاسبة)

هي وظيفة مصممة لغرض واحد فقط: حساب قيمة معينة وإرجاعها فوراً.

  • الهدف: القيام بعملية حسابية أو معالجة نصية وإرجاع نتيجة واحدة (مثل: حساب الضريبة، أو تحويل التاريخ لصيغة معينة).

  • الإرجاع: يجب أن ترجع قيمة واحدة فقط باستخدام كلمة RETURN.

  • الاستدعاء: يتم استدعاؤها مباشرة داخل أوامر SQL (مثلاً: SELECT my_function(price) FROM orders;).

  • القيود: لا يمكنها (في أغلب الحالات) تغيير البيانات في الجداول (مثل عمل UPDATE)؛ فهي مصممة للقراءة والحساب فقط.


مقارنة تفصيلية: Procedure vs Function

وجه المقارنة Stored Procedure Function
القيمة المرجعة اختيارية (صفر أو أكثر) إجبارية (قيمة واحدة فقط)
طريقة الاستدعاء باستخدام أمر CALL تُستخدم داخل SELECT أو WHERE
تغيير البيانات مسموح (DML operations) غير مسموح (للحساب فقط غالباً)
البرامترات تدعم IN, OUT, INOUT تدعم IN فقط
التعامل مع Transactions يمكنها عمل Commit و Rollback لا يمكنها ذلك

ثالثاً: متى تستخدمين كل منهما؟

  1. استخدمي Stored Procedure عندما:

    • تريدين تنفيذ عملية "بزنس" معقدة تشمل أكثر من جدول.

    • تريدين تقليل حجم البيانات المنتقلة بين السيرفر وقاعدة البيانات (عن طريق تنفيذ المنطق محلياً).

    • تحتاجين لعمليات "حذف" أو "تعديل" ضخمة بناءً على شروط متغيرة.

  2. استخدمي Function عندما:

    • تريدين تبسيط كود الـ SELECT الخاص بكِ (مثل دالة تحول العملة).

    • لديكِ عملية حسابية تتكرر كثيراً في استعلاماتك.

    • تريدين شيئاً يمكن استخدامه بسهولة داخل جمل الـ JOIN أو الـ ORDER BY.


الخلاصة

الـ Procedure هو "أداة تنفيذية" للمهام الكبيرة، بينما الـ Function هي "أداة حسابية" ذكية. التوظيف الصحيح لكل منهما يجعل قاعدة بياناتك أسرع، وكود الموقع الخاص بكِ أنظف وأسهل في الصيانة.

والسؤال لكِ الآن: ❌ هل ما زلتِ تضعين المنطق الحسابي المعقد داخل كود الـ PHP/Node.js؟ 👉 أم ستبدأين في نقل هذه الحسابات إلى قاعدة البيانات لتوفير موارد السيرفر؟


الأسئلة الشائعة (FAQ)

  • س1: هل يمكن استدعاء Function من داخل Procedure؟

    • ج: نعم، يمكنكِ استخدام الـ Functions داخل الـ Procedures بكل سهولة.

  • س2: هل يمكن استدعاء Procedure من داخل Function؟

    • ج: لا، هذا غير مسموح به في MySQL لأن الـ Function يجب ألا تؤثر على حالة البيانات (No Side Effects).

  • س3: أيهما أسرع في الأداء؟

    • ج: كلاهما سريع لأنهما مخزنان بشكل مترجم (Pre-compiled)، لكن الـ Function قد تكون أبطأ إذا استُخدمت بشكل خاطئ داخل استعلام SELECT على ملايين الصفوف.

  • س4: هل الـ Procedure يحمي من الـ SQL Injection؟

    • ج: نعم، لأنه يستخدم البرامترات (Parameters) بشكل يعزل البيانات عن الأوامر، مما يجعله وسيلة أمان ممتازة.

  • س5: هل يمكنني إرجاع "جدول كامل" من Function؟

    • ج: في MySQL التقليدية لا، الـ Function ترجع قيمة Scalar (نص، رقم، تاريخ).


🚀 ابدأ رحلتك مع كرياتيفو
وخد أول خطوة حقيقية نحو مستقبلك في البرمجة
📱 ابعتلنا علي واتساب
💬 ابعتلنا علي فيسبوك

الكلمات المفتاحية

الفرق بين البروسيدجر والفانكشن برمجة قواعد البيانات SQL Logic تحسين أداء MySQL كرياتيفو Backend Development تعلم SQL بالعربي Database Optimization

مقالات مشابهة

تصميم

الفرق بين Pseudo-class وPseudo-element في CSS: شرح مبسط مع أمثلة عملية

تعرف على الفرق بين Pseudo-class وPseudo-element في CSS بأسلوب مبسط واحترافي، مع أمثلة عملية تساعدك على استخدامها بشكل صحيح في تطوير الواجهات. دليل شامل لمطوري الويب لفهم الاستخدامات والتطبيقات الحقيقية بدون تعقيد

21 Apr, 2026
تفاصيل المقال
برمجة

اسعار كورسات البرمجة في مصر | اعرف السعر المناسب

اكتشف أسعار كورسات البرمجة في مصر 2026 وأهم الفروق بين الأسعار الرخيصة والعالية؛ اعرف لماذا السعر المناسب مهم وكيف تختار كورس برمجة احترافي يُنمي مهاراتك بدل إضاعة وقتك ومجهودك بدون فائدة.

04 Apr, 2026
تفاصيل المقال
برمجة

ما الفرق بين justify-content و align-items في Flexbox؟

تعرف على الفرق بين justify-content و align-items في Flexbox بأسلوب مبسط وعملي. دليل شامل لمطوري الويب لفهم المحاور والتحكم في محاذاة العناصر باحترافية.

19 Apr, 2026
تفاصيل المقال
برمجة

ما الفرق بين React و Vue.js و Angular

مقال شامل يقارن بين React و Vue.js و Angular من حيث سهولة التعلم، الأداء، المتطلبات قبل التعلم، سوق العمل في مصر والخليج والعالم، والمرتبات، مع توضيح أيهم الأفضل للمبتدئين وللمطورين الباحثين عن فرص عمل في مجال Front-End Development.

13 Apr, 2026
تفاصيل المقال
برمجة

الفرق بين PHP ولغات الـ Backend الأخرى — أيهما تختار؟

تعرف على الفرق بين PHP وباقي لغات الـ Backend مثل Node.js وPython وJava، واكتشف أيهما الأنسب لمشروعك ولمستواك كمطور.

17 Apr, 2026
تفاصيل المقال
تصميم

الفرق بين Flexbox و CSS Grid: متى تستخدم كل منهما في تصميم المواقع؟

تعرف على الفرق بين Flexbox و CSS Grid ومتى تستخدم كل منهما في تصميم المواقع. دليل عملي يساعدك على اختيار الأداة المناسبة لبناء Layout احترافي.

20 Apr, 2026
تفاصيل المقال