Constraints in SQL

السلام عليكم الجميع.

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

مثلآ: لو عندي موقع لما تجي تسجل و تجي عند خانة العمر وقوانين تقول لايسمح الى عمره اقل من 12 يسجل تمام. لو جيت اسجل بعمر 10 سنوات راح يعطيني مرفوض او غير مسموح لي ولكن لو عملت عكس أخترت العمر 15 راح يسمح لي ان اسجل بكل سهوله.

ومثال ثاني: خلينا نقول مكتبة وفي عشرين الف كتاب و كل كتاب له ISBN مميز و كل كتاب راح يكون مخزن في قواعد بيانات و اكيد ISBN راح يكون UNIQUE وغير متكرر. ومستحيل تحصل كتابين مكتوب بنفس الرقم مرتين لانه هذا رقم مميز.

راح أشرح كل قيود ومعاه مثال بالصوره لتوضح الفكرة بشكل افضل.


  • Not NULL: هذا النوع من القيود لايسمح بالقيمة تصبح فارغه او NULL بعمنى لازم يكون لها قيمة او غير مسموح لها ان تبقي بدون قيمة.

مثال بالصوره:

not null

بالبدايه عملت جدول و خانة وحده الى هي اسم سياره لكي نجرب الموضوع

بالجدول وضعنا NOT NULL امام names بحيث يكون قيمة لايسمح لها ان تكون فارغه.

لما جينا ندخل قيمة NULL الى هي بدون قيمة بالاساس يطلع لنا هذا الخطأ

cannot insert NULL into ("SQL_FFMZVSKKUAGCTMXBASBAVULAG"."CAR"."NAMES") ORA-06512: at "SYS.DBMS_SQL", line 1721

بسبب وجود قيود من نوع NOT NULL ولكن لو وضعنا قيمة mycar راح يقبلها بسبب وجود قيمة.

  • UNIQUE: هذا النوع من القيود ان يكون البيانات غير متكرره و فريد من النووع. يعني قيمة نفسها تكون فريد وليس متكرره.

هنا مثال بالصوره:

Unique

بالصوره نلاحظ اننا عملنا جدول و الاسم من النوع Unique تمام.

لما نجي نحفظ نفس قيمتين و نعمل Run بالبداية راح يظهر تم حفظ اول قيمة camry ولكن ثانيه camry لا بسبب القيود التكرار وتطلع هذي رساله

ORA-00001: unique constraint (SQL_FFMZVSKKUAGCTMXBASBAVULAG.SYS_C0032640550) violated ORA-06512: at "SYS.DBMS_SQL", line 1721

تلاحظ لما اغير القيمة الثانيه الى Toyota و اعمل RUN راح يصير عكس بسبب اول قيمة camry هي موجوده ولااقدر اضيفها مره ثانيه بسبب القيود.

  • Primary key: سبق شرحناها بالدرس السابق هو مفتاح الاساسي و يكون نوع غير متكرر و فريد من النوع. كاParent
  • Foreign key: تابعه المفتاح الاساسي ويكون مرجع له كا Child

لنسهل الموضوع سوينا جدولين

اول جدول الاشخاص ويكون فيه مفتاح الاساسي PK و الجدول ثاني اسمه سيارات يكون فيه فقط اسم السياره و FK مفتاح الفرعي يرجع الى جدول الاول.

انا ماحطيت مفتاح الاساسي بالجدول الثاني عشان توضح الفكره بشكل افضل.

راح تلاحظ لما جينا ندخل القيمه مثلآ Aziz عنده 3 سيارات و خالد عنده سيارتين

اسماء سيارات ادخلناها ثم وضعنا مفتاح الفرعي الى يربط الى جدول الى فيه مفتاح الاساسي.

  • CHECK: هذا النوع من القيود يشيك اذا كان الشرط صحيح ولالا. نفس المثال الى وضحته بأول موضوع الى هو اذا كان عمر شخص اقل من 12 مايسجل واذا اعلى مسموح له .

مثال بالصوره:

Check

هنا عملنا جدول العمر

اسم و عمر ولكن العمر المسموح اعلى من 12 او يساوي 12 ولا يرفض.

مثل ماتلاحظ لما نحط العمر 10 ماراح يقبل ويطلع خطأ بسبب القيود. ولكن اذا حطينا 12 او 13 وفوق راح يقبل بكل سهوله ومافي اي مشاكل..

  • DEFAULT: هذا النوع من القيود يكون افتراضي من تلقائ نفسه. يعني في حال وجود بيانات لايوجد لها قيمة او null راح تصبح كلمة الافتراضيه الى مختار لها.

هنا انتهينا من شرح القيود في SQL و ان شاءالله تكون واضحه ومفهومه يارب.

اذا عندك سؤال او تبي تكتبت تعليق اكتبها تحت وان شاءالله ارد عليك

اشوفكم على خير…..