Tengo una tabla:¿Cómo eliminar archivos cuando se borra un registro?
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
);
Cuando se elimina una fila de esta tabla, el archivo al que hace referencia debe suprimirse también. Hay dos escenarios cuando los registros se eliminan de esta tabla:
- El usuario elimina una fotografía en particular.
- El usuario elimina un objeto de propiedad particular (como en "propiedad inmobiliaria"), y todas las fotos que hacen referencia a esa propiedad se eliminan automáticamente por
ON DELETE CASCADE
.
Sé que puedo seleccionar todas las fotos a las que se hace referencia en la base de datos antes de eliminar una propiedad y eliminarlas junto con sus archivos uno por uno, pero estoy buscando una solución alternativa. ¿Es posible detectar el momento en que se elimina un registro en la tabla photo
y eliminar el archivo automáticamente, sin renunciar a la cláusula CASCADE
, de alguna manera?
Un disparador puede realizar acciones en la base de datos en el momento de una 'eliminación'. Pero para eliminar archivos fuera de la base de datos, debe hacerlo usted mismo. –
No creo que eso sea posible. el mismo problema se planteó [aquí] (http://stackoverflow.com/questions/6527514/delete-file-using-mysql-procedure) – HichemSeeSharp
Es posible a través de una función definida por el usuario llamada sys_exec, pero no lo recomendaría. Debe controlar este comportamiento a través del idioma que hace que su aplicación se ejecute, la base de datos solo debe manejar sus datos, no los archivos también. –