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

تم النشر | بواسطة: Samar Shetiwy | Apr 22, 2026 | منذ شهر |
برمجه
| عدد المشاهدات: 1,130
ما الفرق بين الـ 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

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

برمجة

لماذا يُستخدم PHP مع MySQL تحديدًا ؟ — العلاقة بين الاثنين

اكتشف لماذا يُستخدم PHP مع MySQL في تطوير الويب، وكيف يعملان معًا لإنشاء مواقع ديناميكية قوية وسريعة مع أفضل الممارسات.

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

ما الفرق بين القوائم والـ Tuples والـ Dictionaries في البرمجة؟ شرح مبسط للمبتدئين

تعرف على الفرق بين القوائم والـ Tuples والـ Dictionaries في البرمجة بلغة Python، وكيفية استخدام كل نوع من هياكل البيانات وأهم مميزاته واستخداماته.

17 Apr, 2026
تفاصيل المقال
برمجه

ما هي أنواع البيانات الشائعة في MySQL وكيف تختار النوع المناسب

اختيار نوع البيانات الصحيح هو الخطوة الأولى لتحسين أداء قاعدة بياناتك وتوفير مساحة التخزين. اكتشف الفرق بين أنواع البيانات الشائعة في MySQL ومتى تستخدم كل منها.

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

ما هو MySQL ولماذا هو الأكثر استخداماً مع PHP؟

لماذا يختار المبرمجون دائماً ثنائي MySQL و PHP لبناء مواقعهم؟ اكتشف تاريخ هذا الاندماج القوي، مميزات MySQL التقنية، وكيف أصبح المحرك الأساسي لأشهر منصات الويب في العالم.

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

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

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

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

ما الفرق بين الـ DELETE و TRUNCATE و DROP في MySQL؟

الفروقات الجوهرية بين أوامر الحذف DELETE و TRUNCATE و DROP في MySQL. تعلم متى تستخدم كل أمر لتحسين أداء مشروعك وحماية بياناتك.

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