【发布时间】:2016-11-05 04:28:26
【问题描述】:
我最近发现了 InnoDB 的外键和删除级联的奇迹,我喜欢它。它可以帮助我轻松删除复杂的数据结构,而不必担心留下垃圾。
我目前正在以下列方式存储产品数据库的图像(就像您在网上商店中一样):
我的products 表是您所期望的,它有一个id 主列。
我的product_images 表有一个product_id 列,其中有一个指向products.id 列的外键,以及一个存储图像文件名的varchar 类型的image 列。
文件名是通过计算图像的 SHA1 哈希值创建的,然后存储在以哈希值的前 2 个字符命名的文件夹中:
61/6153A6FA0E4880D9B8D0BE4720F78E895265D0A9.jpg。数据库中只存储了6153A6FA0E4880D9B8D0BE4720F78E895265D0A9.jpg。
现在,如果我要从数据库中删除产品,级联 DELETE 规则将删除 product_images 表中的记录,但会将文件保留在我的服务器上。
有没有办法在product_images 表中的记录被删除时自动删除图像文件,无论是具体还是通过级联?也许将某种触发器或例程链接到删除操作?
【问题讨论】:
-
我认为 MySQL 中不存在这样的功能,但很想听听解决这个问题的方法
-
这也是我不使用
CASCADE(或FOREIGN KEYs,就此而言)的另一个原因,而是在应用程序中完成所有工作。
标签: mysql database triggers innodb cascading-deletes