يسمح ON DELETE SET NULL بحذف الصف الأب مع الاحتفاظ بالصفوف التابعة التي كانت تشير إليه. بدل حذف هذه الصفوف، يضع MySQL القيمة NULL في عمود المفتاح الخارجي. تصبح العلاقة غير محددة، بينما تبقى بقية بيانات الصف التابع محفوظة، مثل رقم المهمة وعنوانها وتاريخ إنشائها.
لكي تنجح هذه السياسة، يجب أن يسمح عمود العلاقة بتخزين NULL. لا يمكن تعريفه باستخدام NOT NULL ثم مطالبة المفتاح الخارجي بوضع قيمة فارغة فيه عند الحذف. هذا تعارض في تصميم الجدول، ويجب حله باختيار تعريف متوافق مع السلوك المطلوب.
مثال
CREATE TABLE employees (id INT PRIMARY KEY);
CREATE TABLE tasks (
id INT PRIMARY KEY,
employee_id INT NULL,
FOREIGN KEY (employee_id) REFERENCES employees(id)
ON DELETE SET NULL
);
في هذا التصميم يمكن الاحتفاظ بمهمة بعد حذف الموظف المسندة إليه، ثم إسنادها لاحقًا إلى موظف آخر. حذف الموظف لا يغيّر معرّف المهمة ولا يزيل الصف نفسه من جدول المهام.
باختصار: تحتفظ SET NULL بالصف التابع وتفرغ مرجعه، ولذلك تتطلب عمود علاقة يقبل NULL.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.