اذهب إلى المحتوى

السؤال

نشر

سلام عليكم

عندي قاعدة بيانات ضخمة 

منها جداول كثيرة مرتبطة بجدول اسمه order 

و الربط يتم بجقل اسمه order_id 

الان عاوز لو حذفت من جدول order مثلا ال id رقم 3 

عاوز طريقة سهلة اخليه يلف عالداتابيز كلها لو لقا حقل اسمه order_id و قيمته تساوي 3 يحذفه 

مع الشكر

Recommended Posts

  • 1
نشر

هل جربت تعريف القيد ON DELETE CASCADE عند تعريف العلاقات بين الجداول؟

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

يمكن اضافة تعريف القيد الى تعريف العلاقة كـ:

CREATE TABLE some_related_table (
    id INT,
    order_id INT,
    FOREIGN KEY(order_id) 
        REFERENCES orders(id)
        ON DELETE CASCADE
);

ثم سيتم اعتبار هذا القيد عند كل حذف.

راجع الاجابة 

 

  • 1
نشر
بتاريخ 5 دقائق مضت قال محمد المصري5:

لا للاسف لم افعلها
هل يمككني اضافتها على الجداول التي تحتوي order_id بعد ان تم انشاءها 

جرب تنفيذ الاستعلام ALTER TABLE ADD CONSTRAINT للتعديل على جدول منشئ بالفعل

ALTER TABLE related_table
ADD FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE;

يقتضي هذا ان لا تكون العلاقة معرفة بالفعل. لأنها هي الأخرى قيد CONSTRAINT. 

ان كانت هنالك علاقات بالفعل، يجب حذفها اولا ثم تنفيذ الاستعلام الموصوف لتعريف العلاقة وفق قيد.

  • 0
نشر
بتاريخ الآن قال محمد المصري5:

ظهرلي هذا الخطأ اخي الفاضل


#1452 - Cannot add or update a child row: a foreign key constraint fails (`areyadac_brodan`.`#sql-2e42d0_10cb702`, CONSTRAINT `#sql-2e42d0_10cb702_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE)

 

هل الجداول تحتوي بالفعل على علاقات؟ 

يرجى ايضا فهم الاستعلام على نحو جيد لتنفيذه.

هل يحتوي الجدول المستهدف على عمود order_id؟ و جدول orders على عمود id؟ هل يمتلكان نفس نوع البيانات؟ 

في حالة التعذر رغم ذلك جرب تنفيذ:

SET FOREIGN_KEY_CHECKS=0;

ثم اعد المحاولة.

  • 0
نشر
بتاريخ 14 دقائق مضت قال محمد المصري5:

نعم فهمت الاستعلام استاذي الفاضل

و فعلا الجدول المستهدف يحتوي على الحقل المطلوب و يمتلك نفس نوع بيانات orders.id 

العلاقات انشأتها برمجيا و ليس من mysql 

 

بتاريخ 19 دقائق مضت قال Adnane Kadri:

في حالة التعذر رغم ذلك جرب تنفيذ:


SET FOREIGN_KEY_CHECKS=0;

ثم اعد المحاولة.

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...