私はテーブルを持っている:このテーブルから行が削除されるとレコードが削除されたときにファイルを削除する方法は?
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つの特定の写真を削除します。
- ユーザーは特定のプロパティオブジェクト(「不動産プロパティ」など)を削除し、そのプロパティを参照するすべての写真は自動的に
ON DELETE CASCADE
で削除されます。
私は、プロパティを削除する前にデータベース内の参照されているすべての写真を選択し、ファイルごとに1つずつ削除することができますが、代わりの解決策を探しています。 photo
テーブルのレコードが削除された瞬間をキャッチして、CASCADE
句を辞めることなく、ファイルを自動的に削除することは可能でしょうか?
トリガーは、「削除」の時点でDBに対してアクションを実行できます。しかし、DBの外でファイルを削除するには、それを自分で行う必要があります。 –
私はそれが可能ではないと思います。同じ問題が発生しました[ここ](0stackoverflow.com/questions/6527514/delete-file-using-mysql-procedure) – HichemSeeSharp
これは、sys_execと呼ばれるユーザ定義の関数によって可能ですが、私はそれをお勧めしません。あなたのアプリケーションを実行させる言語を介してこの動作を制御する必要があります、データベースだけでなく、ファイルを処理する必要があります。 –