شبكة تعلم مع ناو

ماذا يحدث إذا خالف صف واحد CHECK في INSERT متعدد الصفوف؟

عند تنفيذ INSERT عادي متعدد الصفوف على جدول InnoDB، فإن انتهاك قيد CHECK في أحد الصفوف يفشل العبارة وتُلغى تغييراتها. لا ينبغي افتراض أن الصفوف الصحيحة التي وردت أولًا ستبقى محفوظة بينما يُرفض الصف المخالف وحده. نحن هنا نتحدث عن عبارة واحدة، دون استخدام IGNORE.

هذا الفرق مهم في استيراد مجموعة بيانات. قد يحتوي الإدخال على عدة أسعار صحيحة وسعر واحد سالب، ومع ذلك لا يضيف أيًا من صفوف تلك العبارة. أما البيانات التي كانت محفوظة قبل العبارة فلا تُحذف بسبب هذا الخطأ. ويُطبَّق CHECK فعليًا في MySQL بدءًا من 8.0.16.

مثال

CREATE TABLE books (
  id INT PRIMARY KEY,
  price INT NOT NULL CHECK (price > 0)
) ENGINE=InnoDB;
INSERT INTO books VALUES (1, 20);
INSERT INTO books VALUES (2, 30), (3, -5);

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

باختصار: مخالفة صف واحد في هذا الإدخال تلغي العبارة كاملة، وتحافظ على الصفوف المحفوظة قبلها.

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

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.