Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

SQLوضع شروط لتخزين القيم

  • مفهوم وضع شروط لتخزين القيم
  • تجهيز قاعدة البيانات التي سنطبق عليها
  • وضع شرط على العمود عند إنشاء الجدول
  • وضع شرط على العمود بعد إنشاء الجدول
  • إختبار الشروط الموضوعة على قيم الجدول
  • حذف قيد الشرط الموضوع على العمود

مفهوم وضع شروط لتخزين القيم

عند تخزين البيانات في الجدول، يجب الإلتزام بنوع البيانات التي يمكن تخزينها في كل حقل. فمثلاً العمود الذي نوعه INT يمكن أن نخزن فيه أعداد صحيحة، و العمود الذي نوعه VARCHAR يمكن أن نخزن فيه نصوص و هكذا.

ماذا لو أردت وضع شروط على القيم التي يسمح بتخزينها، مثلاً تريد تخزين أعداد صحيحة و لكنك تريد أن تكون هذه الأعداد بين 0 و 100 فقط.
في هذه الحالة يمكنك إضافة قيد ( Constraint ) تضع فيه شرط قبول أي قيمة سيتم تخزينها في العمود.

القيد يمكن إضافته للعمود أثناء إنشاء الجدول أو في وقت لاحق.

تجهيز قاعدة البيانات التي سنطبق عليها

قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash.

مثال

-- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها
DROP DATABASE IF EXISTS harmash;
-- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها
CREATE DATABASE harmash;
-- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات
USE harmash;
-- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها DROP DATABASE IF EXISTS harmash; -- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها CREATE DATABASE harmash; -- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات USE harmash;

وضع شرط على العمود عند إنشاء الجدول

أثناء إنشاء الجدول يمكنك إضافة قيد على قيم التي سيتم وضعها في الأعمدة كما يلي.

CREATE TABLE table_name (
...
CONSTRAINT constraint_name CHECK (conditions)
);
CREATE TABLE table_name ( ... CONSTRAINT constraint_name CHECK (conditions) );
  • مكان الكلمة constraint_name نضع الإسم الذي سيتم إعطاؤه للقيد.
  • مكان الكلمة conditions نضع شروط قبول القيم في الحقول.

الإستعلام التالي ينشئ جدول جديد إسمه books و يضيف قيد إسمه check_book_pages يؤكد على أن قيم العمود pages يجب أن تكون أكبر من صفر.

مثال

CREATE TABLE books (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255),
pages INT,
price DECIMAL(5,2),
-- check_book_pages_and_price هنا قمنا بوضع قيد بإسم
-- يجب أن تكون قيمته أكبر من 0 pages يحدد أن العمود
CONSTRAINT check_book_pages CHECK (pages > 0)
);
CREATE TABLE books ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, title VARCHAR(255), pages INT, price DECIMAL(5,2), -- check_book_pages_and_price هنا قمنا بوضع قيد بإسم -- يجب أن تكون قيمته أكبر من 0 pages يحدد أن العمود CONSTRAINT check_book_pages CHECK (pages > 0) );

وضع شرط على العمود بعد إنشاء الجدول

في حال كان لديك جدول و تريد وضع شروط على القيم التي سيتم تخزينها فيه يمكنك تعديل الجدول و إضافة الشرط فيه كقيد كما يلي.

ALTER TABLE table_name
ADD CONSTRAINT constraint_name
CHECK (conditions);
ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK (conditions);
  • مكان الكلمة constraint_name نضع الإسم الذي سيتم إعطاؤه للقيد.
  • مكان الكلمة conditions نضع شروط قبول القيم في الحقول.

الإستعلام التالي يضيف قيد إسمه check_book_price يؤكد على أن قيم العمود price يجب أن تكون بين 0 و 50.

مثال

ALTER TABLE books -- books هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول
ADD CONSTRAINT check_book_price -- check_book_price هنا قمنا بوضع قيد إسمه
CHECK (price BETWEEN 0 AND 50) -- يجب أن تكون بين 0 و 50 price يحدد أن قيمة العمود
ALTER TABLE books -- books هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول ADD CONSTRAINT check_book_price -- check_book_price هنا قمنا بوضع قيد إسمه CHECK (price BETWEEN 0 AND 50) -- يجب أن تكون بين 0 و 50 price يحدد أن قيمة العمود

إختبار الشروط الموضوعة على قيم الجدول

الإستعلام التالي يحاول إضافة سطر في الجدول books و لكنه سيفشل لأن القيمة الموضوعة في الحقل pages أصغر من صفر.

المثال الأول

INSERT INTO books (title, pages, price)
VALUES ('SQL for dummies', -20, 15);
INSERT INTO books (title, pages, price) VALUES ('SQL for dummies', -20, 15);

النتيجة

Check constraint 'check_book_pages' is violated.

النتيجة تعني أنه لم يتم إضافة السطر و هذا الأمر حدث بسبب أن القيد check_book_pages فحص القيمة المدخلة في الحقل pages و وجدها لم تطابق الشرط الموضوع فيه.


الإستعلام التالي يحاول إضافة سطر في الجدول books و لكنه سيفشل لأن القيمة الموضوعة في الحقل price ليست بين 0 و 50.

المثال الثاني

INSERT INTO books (title, pages, price)
VALUES ('SQL for dummies', 240, 70);
INSERT INTO books (title, pages, price) VALUES ('SQL for dummies', 240, 70);

النتيجة

Check constraint 'check_book_price' is violated.

النتيجة تعني أنه لم يتم إضافة السطر و هذا الأمر حدث بسبب أن القيد check_book_price فحص القيمة المدخلة في الحقل price و وجدها لم تطابق الشرط الموضوع فيه.


الإستعلام التالي يحاول إضافة سطر في الجدول books وسينجح في ذلك لأن جميع القيم المدخلة لا تخالف القيود الموضوعة على الأعمدة.

المثال الثالث

INSERT INTO books (title, pages, price)
VALUES ('SQL for dummies', 240, 24.99);
INSERT INTO books (title, pages, price) VALUES ('SQL for dummies', 240, 24.99);

النتيجة

1 row inserted.

النتيجة تعني أنه تم إضافة السطر في الجدول.

حذف قيد الشرط الموضوع على العمود

لحذف قيد الشرط الموضوع على القيم التي يمكن تخزينها في العمود يمكنك استخدام الأمر ALTER كما يلي.

ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
  • مكان الكلمة table_name نضع إسم الجدول الذي يحتوي على القيد.
  • مكان الكلمة constraint_name نضع إسم القيد الذي نريد حذفه.

الإستعلام التالي يقوم بحذف القيد check_book_price من الجدول books.

مثال

ALTER TABLE books -- books هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول
DROP CONSTRAINT check_book_price; -- من الجدول check_book_price هنا قمنا بتحديد أننا نريد حذف القيد
ALTER TABLE books -- books هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول DROP CONSTRAINT check_book_price; -- من الجدول check_book_price هنا قمنا بتحديد أننا نريد حذف القيد