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

このテーブルの行を削除すると、その行が参照しているファイルも削除する必要があります。このテーブルからレコードが削除されるシナリオは2つあります。

  1. ユーザーが特定の写真を1枚削除します。
  2. ユーザーが1つの特定のプロパティオブジェクトを削除すると(「不動産プロパティ」のように)、そのプロパティを参照しているすべての写真がによって自動的に削除されますON DELETE CASCADE

プロパティを削除する前にデータベース内の参照されているすべての写真を選択し、それらをファイルとともに1つずつ削除できることはわかっていますが、別の解決策を探しています。photoテーブル内のレコードが削除された瞬間をキャッチし、CASCADE句を辞任することなく、おそらく何らかのトリガーでファイルを自動的に削除することは可能ですか?

4

1 に答える 1

9

DELETETRIGGERを探しています。同様の問題と解決策については、こちらをご覧ください。外部アクションは、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 に答える