愿有人帮助我。我正在尝试一些东西,但我(也)是(我的)SQL的新手。
我使用两个表:项目和类别。表项具有带外键的字段:category_id。
我希望表格类别保持整洁。因此,如果项目中的项目不属于类别中的类别X,则应从类别中删除类别X.你是如何建立的。我通过使用DELETE ON CASCADE猜测,但到目前为止,当我从类别中删除类别时,它只删除了项目中的相应项目。
非常感谢帮助我!
答案 0 :(得分:43)
ON DELETE CASCADE
是一种在删除引用的行时删除行的方法。这意味着:
所以你有物品,每件物品都属于一个特定的类别。在您的项目表中,您有一个category_id(请修改您的拼写),它引用了类别表中的一行。所以,在你的情况下:
你所要求的是另一种方式:
由于两个原因,无法使用ON DELETE CASCADE
执行此操作:
这一切都源于ON DELETE CASCADE
是维护参照完整性的一种方式。也就是说,这是数据库为您提供强有力保证的一种方式,如果您在项目#9847上看到类别#20393,当您去寻找类别#20393 时,您知道它存在。 不是省力的设备。 :)这就是为什么其他选项是ON DELETE SET NULL
和ON DELETE RESTRICT
:它们也保证完整性,但它们不会删除,而是删除不良引用或阻止原始删除。
所以答案是,如果您担心空类别,则必须编写一个cron作业来定期清理该表或使用某种ON DELETE触发器。