我有一个使用邻接列表模型进行层次结构存储的表。因此,此表中我最相关的列是:
ItemId // is auto_increment
ParentId
Level
ParentTrail // in the form of "parentId/../parentId/itemId"
然后我创建了一个插入前跳跳器,用于填充列Level
和ParentTrail
. 由于最后一列还包括当前项目的 ID,我不得不在我的触发器中使用一个技巧,因为auto_increment
在插入前触发器中列不可用。所以我从information_schema.tables
表中得到了这个值。
ParentId
一切正常,直到我尝试编写一个更新触发器,当项目更改其父项(已更改)时,它将更新我的项目及其后代。但我无法在更新触发器内对我的表进行更新。我所能做的就是改变当前记录的值,而不是其他的。
我可以为层次结构数据使用单独的表,但这意味着我还必须创建一个视图来组合这两个表(1:1 关系),我想完全避免这种情况。
有没有办法将所有这些都放在同一个表中,以便这些字段(Level
和ParetTrail
)使用触发器自动设置/更新自己?