6

我有一张桌子:

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

我知道我可以在删除属性之前选择数据库中所有引用的照片并将它们连同文件一起删除,但我正在寻找替代解决方案。photo是否有可能捕捉到删除表中的记录并自动删除文件的时刻,而不用退出CASCADE子句,也许在触发器中以某种方式?

4

1 回答 1

9

您正在寻找DELETE TRIGGER。有关类似的问题和解决方案,请参见此处。外部操作可以通过安装sys_exec来实现。

CREATE TRIGGER foobar
AFTER DELETE ON photo
FOR EACH ROW
BEGIN
   CALL sys_exec(concat('/bin/rm -f ',filename));
END
于 2012-09-26T11:43:04.983 回答