删除记录时如何删除文件?

时间:2012-09-26 11:36:33

标签: mysql

我有一张桌子:

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
);

删除此表中的行时,也应删除其引用的文件。从该表中删除记录有两种情况:

  1. 用户删除一张特定照片。
  2. 用户删除一个特定的属性对象(如“不动产”),引用该属性的所有照片将由ON DELETE CASCADE自动删除。
  3. 我知道我可以在删除属性之前选择数据库中所有引用的照片,并将它们与文件一个一个地删除,但我正在寻找替代解决方案。有没有可能抓住删除photo表中的记录并自动删除文件的时刻,而无需重新签署CASCADE子句,可能会以某种方式触发?

1 个答案:

答案 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