【问题标题】:MySQL procedure to delete related rowsMySQL删除相关行的过程
【发布时间】:2012-05-21 12:29:52
【问题描述】:

我有桌子:

id  parent  name

现在,父字段是其他行的 id。 正如 MySQL 所说,我不能为此使用触发器:

无法更新存储函数/触发器中的表“products_categories”,因为它已被调用此存储函数/触发器的语句使用。

一个过程应该如何删除所有具有类似已删除 id 的父项的行?

【问题讨论】:

  • 您只需要孩子还是所有后代?
  • @srini.venigalla 假设我删除了 id=40。然后触发器/程序应该删除所有具有 parent=40 的行。当它删除所有其他人时,触发器/程序也应该适用于他们。
  • @rzeka 您的模型称为邻接模型。遍历邻接模型中的层次结构需要底层数据库支持某种递归,而 mysql 不支持。嵌套模型会更好地为您服务。遍历嵌套模型不需要递归。请谷歌搜索“Celko 嵌套模型删除行”,您将获得大量文献。还有一个从 Adjaceny Model 创建嵌套模型的过程。

标签: mysql procedure delete-row


【解决方案1】:

您可以递归调用该过程。该过程必须执行以下操作:

  • parent值读入变量
  • 删除记录(通过其id
  • 如果parent 值不为NULL - 再次调用该过程并将parent 值作为IN 参数传递。

检查服务器变量ma​​x_sp_recursion_depth - 存储过程可以调用自身的次数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多