【发布时间】:2013-04-30 14:02:15
【问题描述】:
我在 mysql 中存储了一个嵌套集。
我使用下面的动态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 没有返回任何结果,层次结构将被破坏。将其包装在事务中不会阻止这种情况。
如何确保仅在第一个 SELECT 语句返回结果时才执行 UPDATE 和 INSERT 语句? (如果可能的话,我真的更喜欢完全在 SQL 中执行此操作。)
感谢(提前)您的帮助。
【问题讨论】:
标签: mysql dynamic-sql