我在mysql中存储一个嵌套集。动态SQL如果声明?
我用下面的动态SQL插入一个节点:
SELECT @myLeft := lft
FROM t
WHERE id = ?;
UPDATE t
SET rgt = rgt + 2
WHERE rgt > @myLeft;
UPDATE t
SET lft = lft + 2
WHERE lft > @myLeft;
INSERT INTO t
(title, lft, rgt)
VALUES ("New", @myLeft + 1, @myLeft + 2);
这工作得很好。但是有一个潜在的问题,如果第一个SELECT没有返回任何结果,那么层次结构将被破坏。在交易中包装这不会妨碍这一点。
我怎样才能确保UPDATE和INSERT语句,如果第一个SELECT语句返回一个结果只执行? (如果可能的话,我真的喜欢在SQL完全做到这一点。)
感谢(提前)对你的帮助。
这是否意味着我必须使用存储过程?有没有办法用简单的查询来做到这一点? – user1031947 2013-05-06 18:49:54