我有一个包含商店和租赁副本的数据库。每个租赁副本都分配给商店。我想创建一个触发器,如果你删除某个商店,它会将该商店的所有副本分配给另一个预定义商店(cvr)。
我试过这样的话:
CREATE OR REPLACE TRIGGER delete_trig
BEFORE DELETE ON Store
FOR EACH ROW
BEGIN
UPDATE RentalCopy SET cvr = 123456789
WHERE cvr = :old.cvr;
END;
我收到一个错误,说我违反了之前添加的约束(它处理这两个表之间的外键),因为它找到了一个子记录。我该如何解决?
这些表的表定义:(相关部分)
RentalCopy:
barcode INTEGER NOT NULL,
CVR INTEGER NOT NULL,
PRIMARY KEY(barcode),
CONSTRAINT fk_storeinfo
FOREIGN KEY (CVR) REFERENCES Store
商店:
CVR INTEGER NOT NULL,
store_name VARCHAR2(30) NOT NULL,
PRIMARY KEY(CVR)
答案 0 :(得分:1)
查看您的代码,看起来您的表RentalCopy通过两个表的列CVR上的外键连接到Store。
因此,RentalCopy中的CVR值必须在Store表上具有相应的cvr,否则将导致外键错误。
您获得的错误可能是因为您尝试从Store中删除/更新cvr记录 (因为那时表RentalCopy的forign键在Store表中没有cvr作为子项),而不是因为任何触发器语法错误