1/31/2013

Cascading Constraints , ON DELETE CASCADE

السلام عليكم
Cascading Constraints

هى تقوم بـ الغاء العلاقات بين الجداول فى حاله Primary key,Unique , Foreign key
 يمكنك استخدامها مع جمله DROP COLUMN 
يمكنك ايضا من خلالها مسح اكتر من قيد فى نفس الوقت 
على سبيل المثال عندى جدول بأسم test_constraint يوجد علاقه ما بين عمود fk وعمود pk وهى علاقه اب لـ ابن
Code

CREATE TABLE  TEST1 (
PK     NUMBER PRIMARY KEY,
FK     NUMBER,
COL1 NUMBER,
col2   NUMBER,
CONSTRAINT fk_constraint FOREIGN KEY (fk) REFERENCES test1,
CONSTRAINT CK1 CHECK (PK > 0 AND COL1 > 0),
CONSTRAINT ck2 CHECK (col2 > 0));

اذا اردت ان تقوم بحذف عمود pk سوف يظهر لى الخطأ التالى
ALTER TABLE test1 DROP (pk);
Error starting at line 10 in command:
ALTER TABLE test1 DROP (pk)
Error report:
SQL Error: ORA-12992: cannot drop parent key column
12992. 00000 -  "cannot drop parent key column"
*Cause:    An attempt was made to drop a parent key column.
*Action:   Drop all constraints referencing the parent key column, or
           specify CASCADE CONSTRAINTS in statement.
ايضا نفس الأمر لو اردت حذف عمود col1 لانه ايضا يوجد عليه قيد
ALTER TABLE test1 DROP (col1);
يأتى هنا دور Cascading Constraints
فى المثال التالى سوف نقوم بحذف عمود pk من جدول test1
ALTER TABLE TEST1
DROP COLUMN PK CASCADE CONSTRAINT;
table TEST1 altered.
فى المثال التالى سوف نحذف اكتر من قيد فى نفس الجمله 
ALTER TABLE TEST1
DROP (FK,COL1)CASCADE CONSTRAINT;
table TEST1 altered.
كما يمكنك قراءه المزيد عن Constraint من هنا (1) (2)




السلام عليكم
ON DELETE CASCADE

اذا كنت ترغب عند مسح اى بيانات  من الـ parent يتم مسحها فى الـ child اذن فـ انت تبحث عن هذا الامر
فى المثال التالى قمت بأنشاء foreign key لـ department_id من جدول الـ departments فى جدول الـ emp وعند استخدامى للأمر on delete cascade عند مسح اى بيانات من عمود الـ department_id من جدول departments سوف يقوم بمسحها ايضا من جدول الـ emp

Code
ALTER TABLE EMP
ADD CONSTRAINT EMP_DT_FK
FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENTS ON DELETE CASCADE ;

No comments:

Post a Comment