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

هل يفحص MySQL البيانات القديمة عند إضافة CHECK؟

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

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

مثال

CREATE TABLE books (
  id INT PRIMARY KEY,
  price INT NOT NULL
);
INSERT INTO books VALUES (1, 20);
ALTER TABLE books
  ADD CONSTRAINT chk_books_price CHECK (price > 0);

ينجح المثال لأن السعر الموجود يحقق الشرط. وبعد النجاح يُفحص الشرط عند الإدخال والتعديل، فتستمر حماية الجدول من المخالفات الجديدة.

باختصار: إضافة CHECK المفعّل تتطلب صلاحية البيانات السابقة، ولا تنشئ استثناءً تلقائيًا للصفوف القديمة المخالفة.

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

اختبر نفسك

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