bee*_*eeb 3 mysql database triggers innodb cascading-deletes
我最近发现了外键和删除级联与 InnoDB 的奇妙之处,我喜欢它。它帮助我轻松删除复杂的数据结构,而不必担心留下垃圾。
我目前正在通过以下方式存储产品数据库的图像(就像您在网上商店中一样):
我的products表就是您所期望的,它有一个id主列。我的product_images表有一product_id列,该列有一个外键products.id,还有一个image列存储图像文件名的 varchar 类型。
文件名是通过计算图像的 SHA1 哈希值创建的,然后存储在以哈希值的前 2 个字符命名的文件夹中:
61/6153A6FA0E4880D9B8D0BE4720F78E895265D0A9.jpg。数据库中只有6153A6FA0E4880D9B8D0BE4720F78E895265D0A9.jpg存储。
现在,如果我要从数据库中删除产品,级联 DELETE 规则将删除product_images,但会将文件保留在我的服务器上。
有没有办法在删除表中的记录时自动删除图像文件product_images,无论是专门删除还是级联删除?也许将某种触发器或例程链接到删除操作?
mysql 中没有内置的本机功能来执行此操作。如果有的话,将其转变为功能蔓延和成熟的高级编程语言将是永无止境的。臃肿的软件,远离其核心能力。
人们已经使用了用 C 语言编译的 UDF 库,这些库可以作为目标文件集成到 mysql 中,也可以编译到服务器源代码中。请参阅向 MySQL 添加新功能和MySQL 的 UDF 存储库部分。它变得像一个科学博览会项目,在你让它工作一次之后,你可能不想将它推广到其他服务器群。
那么你有什么选择呢?安全的赌注始终是将目录/文件名组合写入另一个表(在级联删除层次结构之外)。让另一个迷你系统为您打扫房间。例如,每天两次,使用 Java、C# 或 Python(任何语言)。这些环境具有数据库库和强大的文件操作。无论如何,这样会容易得多。
我做这些类型的事情是为了扩展与 mysql 相关的活动的功能,这些活动主要是基于文件的或存储过程和事件内部禁止的调用。
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |