在我正在研究的项目中,我们有一些表与许多外键关系,并且因为它处于早期开发阶段,关系的数量可能会发生变化。
我们希望能够删除某些表中的记录,但不愿意在外键关系上设置级联删除。
我们考虑了以下选项:
这些选项都不是很好: - (
对于“太长没读”的人群;快速摘要
是否有一种方法可以在逐个查询的基础上指定您想要删除级联?
也许看起来像这样:
-- wouldn't it be nice if this was a real command!
CASCADE DELETE FROM MyTable WHERE ID = @ID
答案 0 :(得分:4)
我不确定在你的情况下我真的看到了手动级联选项的用处。 CASCADE用于维护实体之间的某些关系,如果您和我引用,
不希望它成为默认行为
然后你仍然可以:
CALL CASCADE_DELETE('table_name', 'id = 3')
(并且您将获得一个维护清理脚本的单点)。但是,请注意,基本上你正在增加系统的复杂性,因为可能只是未完成的系统设计。从长远来看,这不会对你有所帮助,在破解功能之前应该解决设计决策(如果可能的话)。
编辑: 如果目的是清理测试数据以符合实际的完整性规则,那么您可以使用适当的规则创建适当的表,然后将数据从测试数据表移动到正确的表。 不符合正确完整性的行将使插入失败,您将获得干净的数据。