DELETE Rules
When you delete a row from a parent table, the database manager checks if there
are any dependent rows in the dependent table with matching foreign key values. If
any dependent rows are found, several actions can be taken. You determine which
action will be taken by specifying a delete rule when you create the dependent
table.
RESTRICT — This rule prevents any row in the parent table from being deleted if
any dependent rows are found. If you need to remove both parent and dependent
rows, delete dependent rows first.
• NO ACTION — This rule enforces the presence of a parent row for every child
after all the referential constraints are applied. This is the default. The difference
between NO ACTION and RESTRICT is based on when the constraint is enforced.
See the DB2 SQL Reference for further details.
• CASCADE DELETE — This rule implies that deleting a row in the parent table
automatically deletes any related rows in the dependent table.
• SET NULL — This rule ensures that deletion of a row in the parent table sets the
values of the foreign key in any dependent row to null (if nullable). Other parts
of the row are unchanged.
UPDATE Rules
The database manager prevents the update of a unique key of a parent row. When
you update a foreign key in a dependent table and the foreign key is defined with
NOT NULL option, it must match some value of the parent key of the parent table.
Two options exist:
• RESTRICT — The update for the parent key will be rejected if a row in the
dependent table matches the original values of the key.
• NO ACTION — The update operation for the parent key will be rejected if any row
in the dependent table does not have a corresponding parent key when the
update statement is completed (excluding after triggers). This is the default
在更新父表中的鍵值時,可以指定兩條規則:RESTRICT 和 NO ACTION。如果從屬表中有從屬行,則 RESTRICT 不允許更新鍵值。如果在更新完成時在從屬表中有從屬行,而從屬行在父表中沒有父鍵,則 NO ACTION 將導致對父鍵值的更新操作被拒絕
RESTRICT 是在更新之前限制,
NO ACTION 是在更新之后限制,
結果一樣,判斷的時間點不同
簡單地說 On delete no action 和 ON DELETE RESTRICT 的區別不大,ON DELETE RESTRICT 要比 On delete no action 的檢查條件嚴格些
書上抄來的解釋(注意,解釋幾乎完全相同,唯一區別在于檢查鍵關聯的時間一個是 after,一個是 before):
ON DELETE NO ACTION. This definition ensures that whenever a delete operation is performed on the parent table of a referential constraint, the value for the foreign key of each row in the child table will have a matching value in the parent key of the parent table (after all other referential constraints have been applied).
ON DELETE RESTRICT. This definition ensures that whenever a delete operation is performed on the parent table of a referential constraint, the value for the foreign key of each row in the child table will have a matching value in the parent key of the parent table (before any other referential constraints are applied).