使用MySQL数据库在嵌套集模型中插入节点的过程

时间:2014-07-16 05:58:08

标签: mysql stored-procedures sql-update sql-insert nested-sets

我尝试使用http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/解释来实现相应插入和删除节点的过程。

例如,这是我创建的4个程序之一:

CREATE DEFINER=`root`@`localhost`
PROCEDURE `firstChildInsert`(IN `@ID` INT(10) UNSIGNED, IN `@L` BIGINT UNSIGNED)
    MODIFIES SQL DATA
    DETERMINISTIC
    SQL SECURITY INVOKER
BEGIN
    UPDATE `nodes` SET `r`=`r`+2 WHERE `r`>`@L` ORDER BY `l` DESC;
    UPDATE `nodes` SET `l`=`l`+2 WHERE `l`>`@L` ORDER BY `l` DESC;
    INSERT INTO `nodes`(`id`,`l`,`r`) VALUES(`@ID`,`@L`+1,`@L`+2);
END

想法是CALL firstChildInsert(#REF_OBJECT_ID,#PARENTNODE_LEFT_POSITION);插入新节点... 其他三个是nextSiblingInsert(...),deleteNode(...)(和后代),shiftNode(... )(同时保留后代)。

然而,在更新插入点右侧所有节点的ORDER BY(右)位置时,甚至会将l列更改为r(LEFT)。我收到了消息" 重复输入'#'关键词' "。

PRIMARY KEY l id已完成l列,因为我可能会使用相同的"类别"在几个节点中。

因此,很明显我可以将其用作关键ORDER BYUPDATE列,但是:

  • 它会对表演产生什么影响?
  • 为什么我的PROCEDURE条款不在PROCEDURE的{​​{1}}声明中工作?
  • 你会考虑我DETERMINISTIC成为{{1}}吗?

0 个答案:

没有答案