当我更新walls 表中的wall_id 时,wall_categories 表中的wall_id 是否也会更新?作为 wall_categories 表中的 wall_id 引用墙壁表中的 wall_id。
与 wall 表中的 desktop_id 相同,因为它是引用 desktop_wall 表中的 desktop_id 的外键,所以当我更新 wall 表中的 desktop_id 时,deskotp_wall 中的 desktop_id 是否也会更新?
不,更新不会自动发生。事实上,你会得到一个SQLException
,因为你试图破坏参照完整性,因此你的更新会失败。这假设您已有效Constraints
地应用于表格。
也有,
ON UPDATE CASCADE
但
并非所有数据库都支持。虽然,级联更新显然应该是首选;如果您的数据库不支持它,则需要实现
after-row Trigger
。
例如,Oracle
您可以将其实现为:
CREATE OR REPLACE TRIGGER walls_wall_upd_trg
AFTER UPDATE OF wall_id ON walls FOR EACH ROW
BEGIN
UPDATE wall_categories
SET wall_id = :new.wall_id
WHERE wall_id = :old.wall_id;
UPDATE wall_comments
SET wall_id = :new.wall_id
WHERE wall_id = :old.wall_id;
END;
CREATE OR REPLACE TRIGGER walls_desk_upd_trg
AFTER UPDATE OF desktop_id ON walls FOR EACH ROW
BEGIN
UPDATE desktop_wall
SET desktop_id = :new.desktop_id
WHERE desktop_id = :old.desktop_id;
END;