Tôi có một bảng:Làm thế nào để xóa các tệp khi một bản ghi bị xóa?
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
);
Khi một dòng từ bảng này sẽ bị xóa, các tập tin được tham chiếu bởi nó sẽ bị xóa theo. Có hai trường hợp khi hồ sơ bị xóa khỏi bảng này:
- Người dùng xóa một ảnh cụ thể.
- Người dùng xóa một đối tượng thuộc tính cụ thể (như trong "thuộc tính bất động sản") và tất cả các ảnh đề cập đến thuộc tính đó sẽ bị xóa tự động bởi
ON DELETE CASCADE
.
Tôi biết tôi có thể chọn tất cả ảnh được tham chiếu trong cơ sở dữ liệu trước khi xóa thuộc tính và xóa chúng cùng với tệp của từng người một, nhưng tôi đang tìm giải pháp thay thế. Có thể nắm bắt thời điểm khi một bản ghi trong bảng photo
bị xóa và xóa tệp tự động mà không từ bỏ điều khoản CASCADE
, có thể bằng cách kích hoạt bằng cách nào đó?
Trình kích hoạt có thể thực hiện tác vụ trên DB trong thời điểm 'xóa'. Nhưng đối với việc xóa tệp bên ngoài DB, bạn phải tự làm điều đó. –
Tôi không nghĩ rằng điều đó là có thể. cùng một vấn đề đã được nêu ra [ở đây] (http://stackoverflow.com/questions/6527514/delete-file-using-mysql-procedure) – HichemSeeSharp
Có thể có một máng người dùng định nghĩa hàm gọi là sys_exec, nhưng tôi sẽ không khuyên bạn nên sử dụng nó. Bạn nên kiểm soát hành vi này trough ngôn ngữ mà làm cho ứng dụng của bạn chạy, cơ sở dữ liệu chỉ nên xử lý dữ liệu của nó, không phải các tập tin là tốt. –