gpt4 book ai didi

mysql - 复杂的 MySQL 删除查询

转载 作者:行者123 更新时间:2023-11-29 00:26:38 25 4
gpt4 key购买 nike

当前结构

SQL ERM Diagram

如您所见,路径可以被多个表和这些表中的多个记录引用。

点也可以被两个不同的表引用。

我的问题

  1. 我想删除 PathType然而,这变得复杂,因为一个Path可能由多个人拥有PathType所以删除 Path不检查有多少引用它就出来了的问题。
  2. 其次,如果这个 Path唯一的引用是 PathType我是尝试删除然后我将要删除此 Path和任何记录在 PathPoints .
  3. 最后,如果 Point 上没有其他引用资料从任何其他记录中,那么也需要删除它,但只有它没有被任何其他对象使用。

到目前为止的尝试

DELETE PathType1.*, Path.*, PathPoints.*, Point.* FROM PathType1,Path,PathPoints,Point WHERE PathType1.ID = 1 AND PathType1.PATH = Path.ID AND (SELECT COUNT(*) FROM PathType1 WHERE PathType1.PATH = Path.ID) < 1 AND (SELECT COUNT(*) FROM PathType2 WHERE PathType2.PATH = Path.ID) = 0

显然上面的声明还在继续,但我认为这不是正确的方式,因为如果一个失败,那么什么都不会被删除......

我认为也许不可能通过一条语句完成我正在尝试的操作,我可能必须遍历每个部分并根据结果处理它们。效率不高,但目前我看不到任何替代方案。

我希望这是清楚的。如果您有任何问题或需要任何说明,请随时提问

最佳答案

首先,即使数据库允许,我也无法在这样的查询中执行此操作,而大多数情况下不允许。这是一个无法维护的困惑局面。

首选方法是创建一个事务,然后从最底层的子表开始一次从一个表中删除。然后提交事务。当然还有错误处理,因此如果一次删除未能保持数据完整性,整个事务将被回滚。如果我打算重复执行此操作,我会在存储过程中执行。

关于mysql - 复杂的 MySQL 删除查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18611796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com