قيود NOT NULL وCHECK
امنع القيم المفقودة باستخدام NOT NULL، وتحقق من قواعد المجال باستخدام CHECK، مثل price > 0 وstatus IN ('active','archived').
قيود NOT NULL وCHECK درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
لماذا نستخدم القيود؟
تنقل القيود عملية التحقق إلى داخل قاعدة البيانات. والفائدة كبيرة: إذ تكتب كل التطبيقات والبرامج النصية والاستعلامات المخصصة بيانات صحيحة، أو تفشل بوضوح.
NOT NULL
أبسط قيد: يجب أن يحتوي هذا العمود على قيمة:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL,
age INT -- NULL allowed
);إضافة NOT NULL لاحقًا
أكمل البيانات أولًا، ثم أضف القيد:
UPDATE users SET email = 'unknown@example.com' WHERE email IS NULL;
ALTER TABLE users ALTER COLUMN email SET NOT NULL;قيد CHECK
تعبير منطقي عشوائي يجب أن يستوفيه كل صف:
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
price NUMERIC(10,2) NOT NULL CHECK (price > 0),
discount NUMERIC(5,2) DEFAULT 0 CHECK (discount BETWEEN 0 AND 100)
);CHECK مع قيم شبيهة بـ Enum
قيّد العمود بمجموعة ثابتة من القيم:
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
status TEXT NOT NULL
CHECK (status IN ('pending','paid','shipped','cancelled'))
);تمرر NULL عبر CHECK بصمت
ينجح قيد CHECK عندما تكون نتيجة التعبير NULL (غير معروفة). اجمعه مع NOT NULL عندما تحتاج إلى ضمان صارم:
CREATE TABLE invoices (
amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);CHECK متعدد الأعمدة
يمكنك الرجوع إلى عدة أعمدة:
CREATE TABLE bookings (
start_at TIMESTAMPTZ NOT NULL,
end_at TIMESTAMPTZ NOT NULL,
CHECK (start_at < end_at)
);إضافة CHECK لاحقًا
تحقق من الصفوف الموجودة أولًا، ثم أضف القيد:
ALTER TABLE products
ADD CONSTRAINT positive_price CHECK (price > 0);
-- fails if any row violates itحيلة NOT VALID للجداول الكبيرة
تجاوز الفحص الكامل الأولي، ثم نفّذ التحقق لاحقًا في الخلفية:
ALTER TABLE products
ADD CONSTRAINT positive_price CHECK (price > 0) NOT VALID;
ALTER TABLE products VALIDATE CONSTRAINT positive_price;القيود المسمّاة
احرص دائمًا على تسمية قيودك حتى تكون رسائل الخطأ وعمليات الترحيل متوقعة:
ALTER TABLE products
ADD CONSTRAINT products_price_positive CHECK (price > 0);لا تكرر المنطق في التطبيق
إذا فرضت قاعدة البيانات القيد، فستستفيد منه كل مسارات تنفيذ التعليمات، ولن تكون هناك حالة «نسيت التحقق». احتفظ بالتحقق المكرر في التطبيق لتحسين تجربة المستخدم (تغذية راجعة فورية)، لكن اجعل قاعدة البيانات مصدر الحقيقة.
مراجعة
يمنع NOT NULL وCHECK أكثر البيانات غير الصالحة شيوعًا.
- NOT NULL: لا توجد قيم مفقودة
- CHECK: قواعد عشوائية لكل صف
- استخدم NOT VALID + VALIDATE عند الإضافة أثناء التشغيل
اختبار سريع
ماذا يحدث إذا كتبت CHECK (price > 0) على عمود لا يتضمن NOT NULL؟
الأسئلة الشائعة
هل درس «قيود NOT NULL وCHECK» مجاني؟
نعم — نص درس «قيود NOT NULL وCHECK» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «قيود NOT NULL وCHECK»؟
امنع القيم المفقودة باستخدام NOT NULL، وتحقق من قواعد المجال باستخدام CHECK، مثل price > 0 وstatus IN ('active','archived'). تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «قيود NOT NULL وCHECK»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- قيود NOT NULL وCHECK
- قيود UNIQUE والمفاتيح المركبة
- FOREIGN KEY والإجراءات المرجعية
- القيم الافتراضية والأعمدة المُولَّدة