- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
请有人帮帮我。我正在尝试一些东西,但我对(我的)SQL (太)陌生。
我使用两个表:项目和类别。表项有一个外键字段:category_id。
我希望表格类别保持整洁。因此,当 Items 中没有商品属于 Categories 中的类别 X 时,应从类别中删除类别 X。你如何确定这一点。我猜测是在 CASCADE 上使用 DELETE,但到目前为止,当我从 Categories 中删除一个类别时,它只是从 Items 中删除相应的项目。
非常感谢您帮助我!
最佳答案
ON DELETE CASCADE
是一种在删除行引用的行时删除行的方法。这意味着:
所以你有项目,每个项目都属于一个特定的类别。在您的 items 表中,您有一个 category_id(请修正您的拼写),它指的是 categories 表中的一行。所以,在你的情况下:
你要求的是另一种方式:
ON DELETE CASCADE
无法做到这一点,原因有二:
这一切都源于 ON DELETE CASCADE
是一种维护参照完整性的方式。也就是说,这是数据库向您提供强有力保证的一种方式,即如果您在项目 #9847 上看到类别 #20393,当您查找类别 #20393 时您知道它存在。它不是省力设备。 :) 这就是为什么其他选项是 ON DELETE SET NULL
和 ON DELETE RESTRICT
的原因:它们也保证完整性,但不是删除,而是删除错误引用或阻止发生原始删除。
所以答案是,如果您担心空类别,您将不得不编写一个 cron 作业来定期清理该表或使用某种 ON DELETE 触发器。
关于mysql - 如何在多对一关系上使用 DELETE ON CASCADE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7291773/
我是一名优秀的程序员,十分优秀!