可以有人帮我。我正在尝试某些东西,但是对(my)SQL不熟悉。
我使用两个表:项目和类别。表项目有一个带有外键的字段:category_id。
我希望表类别保持整洁。因此,如果“项目”中没有任何项目属于“类别”中的X类别,则应从“类别”中删除类别X。您如何确定这一点。我通过使用DELETE ON CASCADE进行猜测,但是到目前为止,当我从“类别”中删除类别时,它只是从“项目”中删除相应的项目。
非常感谢您的帮助!
ON DELETE CASCADE是一种在删除其引用的行时删除该行的方法。这表示:
ON DELETE CASCADE
因此,您拥有项目,并且每个项目都属于一个特定的类别。在您的项目表中,您有一个category_id(请纠正拼写),它指向categorys表中的一行。因此,在您的情况下:
您要的是另一种方式:
无法使用进行此操作ON DELETE CASCADE,原因有两个:
这一切都源于这样ON DELETE CASCADE一种事实,即 保持参照完整性的 一种方式。也就是说,这是数据库为您提供强烈保证的一种方式,即如果您在项目#9847上看到类别#20393,则在转到类别#20393 时就知道它存在 。它 不是 节省劳力的设备。:)这就是为什么其他选项分别是ON DELETE SET NULLand的原因ON DELETE RESTRICT:它们还保证完整性,但它们不会删除,而是删除了错误的引用或阻止了原始删除的发生。
ON DELETE SET NULL
ON DELETE RESTRICT
因此答案是,如果您担心空类别,则必须编写cron作业来定期清理该表或使用某种ON DELETE触发器。