我有一张桌子:
CREATE TABLE photo (
photo_id BIGINT NOT NULL AUTO_INCREMENT,
property_id BIGINT NOT NULL,
filename VARCHAR (50) NOT NULL;
...
PRIMARY KEY (photo_id),
CONSTRAINT photo_fk_property FOREIGN KEY (property_id)
REFERENCES property (property_id)
ON DELETE CASCADE
);
删除此表中的行时,也应删除其引用的文件。从该表中删除记录有两种情况:
ON DELETE CASCADE
自动删除。我知道我可以在删除属性之前选择数据库中所有引用的照片,并将它们与文件一个一个地删除,但我正在寻找替代解决方案。有没有可能抓住删除photo
表中的记录并自动删除文件的时刻,而无需重新签署CASCADE
子句,可能会以某种方式触发?
答案 0 :(得分:9)
您正在寻找DELETE TRIGGER。有关类似问题,请参阅here&解。可以通过安装sys_exec来实现外部操作。
CREATE TRIGGER foobar
AFTER DELETE ON photo
FOR EACH ROW
BEGIN
CALL sys_exec(concat('/bin/rm -f ',filename));
END