في MySQL مع InnoDB، يعمل NO ACTION مثل RESTRICT بالنسبة إلى منع حذف صف أب ما دامت صفوف تابعة تشير إليه. لا يعني الاسم السماح المؤقت بعلاقة مكسورة، ولا يعني تجاهل القيد. التحقق فوري، ولا يؤجل InnoDB هذه المخالفة إلى نهاية المعاملة.
قد يخطئ المطور عندما يخطط لحذف الأب أولًا ثم حذف الأبناء قبل COMMIT، معتقدًا أن سلامة الحالة النهائية تكفي. لكن أمر حذف الأب نفسه يفشل إذا كانت المراجع موجودة وقت تنفيذه. يجب ترتيب العمليات بطريقة تحافظ على القيد، مثل حذف الصفوف التابعة أولًا عندما يكون حذفها مقصودًا.
مثال
CREATE TABLE customers (id INT PRIMARY KEY);
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers(id)
ON DELETE NO ACTION
) ENGINE=InnoDB;
وجود START TRANSACTION لا يحول هذا القيد إلى قيد مؤجل. كما أن السياسة لا تحذف الطلبات تلقائيًا ولا تفرغ مراجعها؛ هذان سلوكان مختلفان لهما تعريفان آخران.
باختصار: يعادل NO ACTION سياسة RESTRICT في InnoDB، وتُرفض المخالفة فور تنفيذ الأمر.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.