لماذا لا يمكن تحديث View يحتوي على SUM وGROUP BY؟

متوسطقراءة دقيقةآخر تحديث 3 أكتوبر 2026

SQL قواعد البيانات

الإجابة

يجمع العرض الذي يستخدم SUM وGROUP BY عدة صفوف أساسية في صف نتيجة واحد. إذا عرض مجموع طلبات كل عميل، فإن المجموع لا يمثل قيمة مخزنة في طلب محدد، بل قيمة محسوبة من مجموعة طلبات. لذلك لا يكون هذا النوع من العروض قابلًا للتحديث في MySQL.

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

مثال

CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT,
  total INT
);
CREATE VIEW customer_totals AS
SELECT customer_id, SUM(total) AS total_spent
FROM orders
GROUP BY customer_id;

يمكن قراءة هذا العرض واستخدامه في التقارير، لكن اسمه لا يحول المجموع إلى عمود عادي قابل للتعديل. كما أن إضافة فهرس إلى الجدول الأساسي قد تحسن الأداء، لكنها لا تزيل مانع التحديث الناتج عن التجميع.

باختصار: العرض التجميعي مخصص لقراءة النتائج المحسوبة، وتجرى التعديلات المطلوبة على الصفوف الأساسية المحددة.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر فهمك

يريد مطور إسناد قيمة جديدة إلى total_spent باستخدام UPDATE على هذا العرض. ما الخطأ في الفكرة؟

CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT,
  total INT
);
CREATE VIEW customer_totals AS
SELECT customer_id, SUM(total) AS total_spent
FROM orders
GROUP BY customer_id;