English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

محددات SQL (Constraints)

في هذا الدرس، ستعلم كيفية استخدام قيود SQL.

ما هو القيود؟

القيود هي قيود على عمود أو عدة أعمدة في الجدول لتقييد نوع القيم التي يمكن تخزينها في العمود. تقدم القيود آلية معيارية للحفاظ على دقة وإكمال البيانات في جدول قاعدة البيانات.

هناك أنواع مختلفة من القيود في SQL، بما في ذلك:

الآن، دعونا نناقش كل قيود.

قيود NOT NULL

قيود NOT NULL تحدد العمود الذي لا يسمح بالقيم NULL.

هذا يعني، إذا تم تطبيق NOT NULL على العمود، فيجب عليك إدخال سطر جديد في الجدول دون إضافة قيمة غير NULL للعمود.

الجملة SQL التالية تُنشئ جدولاً يُدعىلـ personجدول، والذي يحتوي على أربعة أعمدة، من بينها ثلاثة أعمدةid،nameوphoneلا يتم قبول القيم NULL.

CREATE TABLE persons (
    id INT NOT NULL,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL
);

ملاحظة:القيم الفارغة أو NULL مختلفة عن الصفر، الفراغ أو النص الأصفر، مثل '''. NULL يعني أن لم يتم إدخال أي شيء.

قيود PRIMARY KEY

قيود PRIMARY KEY تحدد العمود أو المجموعة التي تحمل القيم الفريدة لتعريف سطر الجدول. لا يمكن أن يكون لدي سطرين في الجدول نفس القيمة للمفتاح الرئيسي. بالإضافة إلى ذلك، لا يمكنك إدخال NULL في عمود المفتاح الرئيسي.

الجملة SQL التالية تُنشئ جدولاً يُدعىpersonsفي الجدول، ووضعidالعمود المحدد كمفتاح رئيسي. هذا يعني أن الحقل لا يسمح بNULL أو القيم المكررة.

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL
);

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

قيود UNIQUE

قيود UNIQUE تقييد عمود أو عدة أعمدة لتشمل قيم فريدة في الجدول.

على الرغم من أن قيود UNIQUE و PRIMARY KEY تفرض الفريدة، إلا أن PRIMARY KEY يجب استخدامها عند إجبار فريدة عمود أو مجموعة عمود (بدلاً من المفتاح الرئيسي).

الجملة SQL التالية تُنشئ جدولاً يُدعىpersonsفي الجدول، ووضعphoneالعمود معين كـ unique. هذا يعني أن هذا الحقل لا يسمح بالقيم المكررة.

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

ملاحظة:يمكن تعريف عدة قيود UNIQUE في جدول واحد، بينما يمكن تعريف قيود PRIMARY KEY في جدول واحد فقط. بالإضافة إلى ذلك، يسمح قيود UNIQUE بخطوط NULL.

قيود الافتراضية (DEFAULT)

قيود الافتراضية DEFAULT تحدد القيمة الافتراضية للعمود.

قيمة العمود الافتراضية هي عندماINSERTإذا لم يتم تخصيص قيمة محددة للجملة، فإن محرك قاعدة البيانات سيسمح بإدخال أي قيمة في العمود.

الجملة SQL التالية هي " البلد/المنطقةإنشاء عمود مع قيمة افتراضية.

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE,
    country VARCHAR(30) NOT NULL DEFAULT 'Australia'
);

ملاحظة:إذا تم تعريف عمود الجدول كـ NOT NULL، لكن تم تخصيص قيمة افتراضية لها، فإنه لا يتطلب تخصيص قيمة واضحة للعمود في جملة INSERT عند إدخال سطر جديد في الجدول.

قيود المفتاح الخارجي (FOREIGN KEY)

المفتاح الخارجي (FK) هو عمود أو مجموعة من الأعمدة تستخدم لبناء وتعزيز العلاقة بين بيانات جدولين.

هذا يظهرالموظفين (employees)وجدول(departmentsعلاقة الجدول ( ) مثال الرسم البياني. إذا نظرت بعناية، ستجدemployeesفي جدولdept_idعلاقة العمود معdepartmentsمع عمود المفتاح الرئيسي في الجدول. لذلك،dept_idالعمودعدد من الموظفينفي المفتاح الخارجيجدولالجدول.

في MySQL، يمكنك إنشاء جدول مفتاح خارجي من خلال تعريف القيود عند إنشاء الجدول. الجملة التالية فيemployeesفي جدولdept_idإقامة مفتاح خارجي، والذي يشاركdepartmentsفي جدولdept_idالعمود.

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT,
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

قيود التحقق (CHECK)

قيود التحقق تستخدم لتحديد القيم التي يمكن وضعها في العمود.

على سبيل المثال، يمكن من خلال إنشاء قيود التحقق لتحديد نطاق القيم المسموح بها في عمود الرواتب، والذي يسمح فقط بالقيم بين 3,000 و 10,000. هذا يمكن منع إدخال رواتب تتجاوز نطاق الرواتب الطبيعية. هذا مثال:

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT NOT NULL CHECK (salary >= 3000 AND salary <= 10000),
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

ملاحظة: MySQL لا يدعم قيود التحقق SQL. ومع ذلك، سينفذ جميع محركات التخزين في MySQL جملة CHECK، لكنها ستتجاهلها.