5/16/2012

How to Add a CONSTRAINT , How to Deferring Constraint

السلام عليكم

 CONSTRAINT سنتحدث اليوم عن القيود 
فى البدايه ما هى القيود :هى عباره عن شرط او مجموعه من الشروط يتم تنفيذها على عمود معين ومن خلال هذه القيود يتم تنفيذ الشرط DML المطلوب على جمل ال 
تتكون القيود من خمس شروط
1-NOT NULL
وهى تضمن ان لا يحتوى العمود على قيمه فارغه
2-UNIQUE
وهى تضمن ان يحتوى عمود او مجموعه من الاعمده ان القيمه الموجوده بداخله فريده من نوعها وغير مكرره على مستوى الصفوف فى الجدول
3-PRIMARY KEY
NULL وهى تضمن ان لا يكون محتوى الصف مكرر على مستوى الصفوف داخل الجدول ولا تسمح بلقيم الفارغه 
4-FOREIGN KEY
وهى تسمح بوجود علاقه بين عمودين فى جدولين مختلفين
5- CHECK
وهى تقوم بعمل شرط معين على عمود معين ويجب ان يحقق الشرط

ملحوظه
SYS_Cn Format او تقوم اوركال بتسميتها باستخدام CONSTRAINT يمكنك تسميه القيود 
 فى مرحلتين المرحله الاولى عند بناء جدول جديد المرحله التانيه بعد بناء الجدولCONSTRAINT يمكنك بناء او انشاء القيود
data dictionary يمكنك اظهار القيود باستخدام ال  

 تحديد القيود Defining Constraint

يمكنك تحديد القيود على مستويين 
الاول على مستوى العمود كما بلمثال التالى
Code

CREATE TABLE emp
( emp_id       NUMBER(6) CONSTRAINT emp_emp_id_pk PRIMARY KEY,
  first_name   VARCHAR2(16),
.......
);

الثانى على مستوى الجدول كما بلمثال التالى

Code

CREATE TABLE emp
( emp_id      NUMBER(6),
  first_name  VARCHAR2(16),
.....
CONSTRAINT emp_emp_id_pk PRIMARY KEY (emp_id)
);

NOT NULL CONSTRAINT مثال على 
ملحوظه
يجب ان يكون الشرط على مستوى العمود 
ولكن توجد طرق اخرى للتعديل على الشرط بحيث لا يشترط  ان يكون على مستوى العمود

Code

CREATE TABLE salary
( sal number(5) NOT NULL,
.......
);

NOT NULL مثال على طريقه اضافه و تسميه الشرط 
Code

ALTER TABLE salary
ADD COLUMN max_sal NUMBER(6) 
CONSTRAINT salary_max_sal_not_null CHECK (max_sal is NOT NULL);




 NOT NULL كيف يمكنك الغاء الشرط
Code

ALTER TABLE salary ALTER COLUMN max_sal  NULL;

السلام عليكم
 How to  Deferring Constraint

 Constraint كيف يمكنك تأجيل عمل القيود
Code
ALTER TABLE <table_name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<column_name>)
DEFERRABLE INITIALLY DEFERRED;


من خلال الكود التالى ستتمكن من اعاده استخدامه وتفعيله مره اخرى
Code
SET CONSTRAINT <constraint_name> IMMEDIATE;

Session من خلال الكود التالى ستتمكن من تفعيل جميع القيود على مستوى ال 
Code
ALTER SESSIONSET CONSTRAINTS = IMMEDIATE;


No comments:

Post a Comment